У меня есть файл Excel, который содержит несколько листов.
Файл Excel был создан из DataSet
с использованием кода ниже.
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");
Каждый лист содержит разные данные, Каждый лист содержит столбец со значением 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;
}
}
Во время чтения значения ячейки DateTime ему присваивается номер двойного типа.
Например: дата 20-11-2018 11: 53: 03 конвертируется в 43424.4951725694 .