Читать из Excel - PullRequest
       6

Читать из Excel

2 голосов
/ 12 марта 2019

У меня есть файл 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...