Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Excel中读取_C#_.net_Excel - Fatal编程技术网

C# 从Excel中读取

C# 从Excel中读取,c#,.net,excel,C#,.net,Excel,我有包含多张工作表的excel文件。 Excel文件是使用下面的代码从数据集创建的 if (dataset.Tables.Count == 0) throw new ArgumentException("DataSet needs to have at least one DataTable", "dataset"); XLWorkbook wb = new XLWorkbook(); for (int i = 0; i < dataset.Tables.Count; i++)

我有包含多张工作表的excel文件。 Excel文件是使用下面的代码从数据集创建的

if (dataset.Tables.Count == 0)
    throw new ArgumentException("DataSet needs to have at least one DataTable", "dataset");

XLWorkbook wb = new XLWorkbook();
for (int i = 0; i < dataset.Tables.Count; i++)
{
    wb.Worksheets.Add(dataset.Tables[i], dataset.Tables[i].TableName);
}
wb.SaveAs(filePath + "\\DataGridViewExport.xlsx");
if(dataset.Tables.Count==0)
抛出新ArgumentException(“数据集需要至少有一个DataTable”、“数据集”);
xl工作簿wb=新的xl工作簿();
对于(int i=0;i
每个工作表都包含不同的数据,每个工作表都包含一个带有DateTime值的列。 列位置将是随机的,没有固定的单元格

当我使用下面的代码读取创建的excel文件时

//Open the Excel file in Read Mode using OpenXml.
            using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePath, false))
            {
                //Read the first Sheet from Excel file.
                Sheet sheet = doc.WorkbookPart.Workbook.Sheets.GetFirstChild<Sheet>();

                foreach (Sheet item in doc.WorkbookPart.Workbook.Sheets)
                {
                    MessageBox.Show(item.Id.Value);

                    //Get the Worksheet instance.
                    Worksheet worksheet = (doc.WorkbookPart.GetPartById(item.Id.Value) as WorksheetPart).Worksheet;

                    //Fetch all the rows present in the Worksheet.
                    IEnumerable<Row> rows = worksheet.GetFirstChild<SheetData>().Descendants<Row>();

                    //Create a new DataTable.
                    DataTable dt = new DataTable();

                    //Loop through the Worksheet rows.
                    foreach (Row row in rows)
                    {
                        //Use the first row to add columns to DataTable.
                        if (row.RowIndex.Value == 1)
                        {
                            foreach (Cell cell in row.Descendants<Cell>())
                            {
                                dt.Columns.Add(GetValue(doc, cell));
                            }
                        }
                        else
                        {
                            //Add rows to DataTable.
                            dt.Rows.Add();
                            int i = 0;
                            foreach (Cell cell in row.Descendants<Cell>())
                            {
                                dt.Rows[dt.Rows.Count - 1][i] = GetValue(doc, cell);
                                i++;
                            }
                        }
                    }
                    DataTable dataTable = dt;

                }
            }
//使用OpenXml以读取模式打开Excel文件。
使用(SpreadsheetDocument文档=SpreadsheetDocument.Open(文件路径,false))
{
//从Excel文件中读取第一张工作表。
工作表=doc.WorkbookPart.Workbook.Sheets.GetFirstChild();
foreach(doc.WorkbookPart.Workbook.Sheets中的工作表项)
{
MessageBox.Show(item.Id.Value);
//获取工作表实例。
工作表工作表=(doc.WorkbookPart.GetPartById(item.Id.Value)作为工作表部分)。工作表;
//获取工作表中存在的所有行。
IEnumerable rows=工作表.GetFirstChild().subjects();
//创建一个新的数据表。
DataTable dt=新的DataTable();
//循环浏览工作表中的行。
foreach(行中的行)
{
//使用第一行向DataTable添加列。
if(row.RowIndex.Value==1)
{
foreach(行中的单元格。子体())
{
dt.Columns.Add(GetValue(doc,cell));
}
}
其他的
{
//将行添加到数据表。
dt.Rows.Add();
int i=0;
foreach(行中的单元格。子体())
{
dt.Rows[dt.Rows.Count-1][i]=GetValue(doc,cell);
i++;
}
}
}
DataTable=dt;
}
}
在读取DateTime单元格值时,它会给出一个双类型数字


例如:日期20-11-2018 11:53:03转换为43424.4951725694

,这就是excel存储日期的方式。检查答案问题是什么?@Magnetron如何从多个列中识别哪一列是datetime。@tschmit007问题是我想要日期而不是双倍数字。@Magnetron包含datetime的单元格的数据类型显示数字。