我可以使用SpreadsheetGear从CSV文件中读取而不格式化单元格吗?

时间:2014-05-09 15:58:57

标签: csv datatable spreadsheetgear

给定一个简单的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 个答案:

答案 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选项,但这与您的案例无关,因为无论如何都将单元格数据存储为文本,因此无法格式化)