Могу ли я использовать SpreadsheetGear для чтения из файла CSV без форматирования ячеек?
Имеется простой CSV-файл, который состоит из строки цифровых символов и даты в британском формате:"00000000","01/01/2014"
и код для получения используемых ячеек:
IWorkbookSet workbookSet = SpreadsheetGear.Factory.GetWorkbookSet();
IWorkbook workbook = workbookSet.Workbooks.Open(@"C:\file.csv");
IRange cells = workbook.Worksheets[0].UsedRange;
когда я получаю доступ cells[0,0].Text
это дает это как 0
, потому что он обрабатывает его как числовой и, следовательно, ведущие 0 не имеют смысла. Это будет делать то же самое для даты. Я пытаюсь вручную создать DataTable из ячеек, но мне нужны исходные значения в файле.
Я старался:
SpreadsheetGear.Advanced.Cells.IValues cells = (SpreadsheetGear.Advanced.Cells.IValues)workbook.Worksheets[0];
var sb = new StringBuilder();
cells[0,0].GetText(sb);
но к строителю строк ничего не добавляется.
Как я могу получить доступ к исходным значениям файла?
1 ответ
SpreadsheetGear не делает доступными исходные значения, указанные в файле CSV (например, "00000000" в вашем случае). Вы сможете получить доступ к данным ячейки только после того, как они проанализированы и обработаны SpreadsheetGear (т. Е. Преобразует вышеприведенное значение в двойное значение 0). Если вам нужны исходные значения CSV, то вам нужно открыть файл самостоятельно, вручную обработать и проанализировать его.
Похоже, что вы в конечном счете хотите DataTable, но если вам все еще требуется создать файл рабочей книги из ваших данных CSV, как только вы создали подпрограмму для ручного открытия и анализа каждой "ячейки" в вашем файле CSV, вы можете ввести каждое значение в электронную таблицу как текст, так что она сохраняется, как это найдено в файле CSV. Вы можете сделать это двумя способами:
1) Установите IRange. NumberFormat to "@", который будет обрабатывать любой вход в этот IRange как текст. Пример:
worksheet.Cells["A1"].NumberFormat = "@";
worksheet.Cells["A1"].Value = "00000000";
2) Добавьте к вашему введенному значению один апостроф, который указывает, что вы хотите, чтобы ввод обрабатывался как текст. Пример:
worksheet.Cells["A1"].Value = "'00000000";
Если вам все еще нужен DataTable на этом этапе, вы можете использовать метод IRange.GetDataTable(...) для этого. Поскольку данные ячейки хранятся в виде текста, значения DataTable также должны отражать эти же значения. Пример:
DataTable dt = worksheet.Cells["A1"].GetDataTable(GetDataFlags.None);
(Существует опция GetDataFlags.FormattedText, но это не очень актуально для вашего случая, так как данные ячейки все равно сохраняются в виде текста и поэтому не будут отформатированы)