C# 从Excel中读取
我有包含多张工作表的excel文件。 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++)
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的单元格的数据类型显示数字。