给定一个简单的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);
但没有任何内容附加到字符串构建器。
如何访问原始文件值?
答案 0 :(得分:0)
SpreadsheetGear不提供CSV文件中的原始值(例如" 00000000"在您的情况下)。在SpreadsheetGear解析和处理单元数据后,您将只能访问单元格数据(即,将上面的值转换为0的double值)。如果您需要CSV的原始值,那么您需要自己打开文件并手动处理并解析它。
听起来你最终想要一个DataTable,但如果你仍然需要从你的CSV数据创建一个工作簿文件,那么一旦你创建了一个例程来手动打开并解析每个" cell"在CSV文件中,您可以将每个值作为文本输入到电子表格中,以便在CSV文件中找到它。你可以通过两种方式解决这个问题:
1)将IRange。NumberFormat设置为" @",它将把该IRange的任何未来输入视为文本。例如:
worksheet.Cells["A1"].NumberFormat = "@";
worksheet.Cells["A1"].Value = "00000000";
2)使用单个撇号前置输入的值,表示您希望将输入视为文本。例如:
worksheet.Cells["A1"].Value = "'00000000";
如果此时仍需要DataTable,可以使用IRange.GetDataTable(...)方法来完成此任务。由于单元格数据存储为Text,因此DataTable值也应反映这些相同的值示例:
DataTable dt = worksheet.Cells["A1"].GetDataTable(GetDataFlags.None);
(有一个GetDataFlags。FormattedText选项,但这与您的案例无关,因为无论如何都将单元格数据存储为文本,因此无法格式化)