Spreadsheetgear为特定列设置数据标志?

我正在尝试这样做:

IWorksheet worksheet = Factory.GetWorkbook().Worksheets[0]; IRange range = worksheet.Cells["A1"]; range.CopyFromDataTable(dataTable, SetDataFlags.None); worksheet.Cells.Columns.AutoFit(); return worksheet; 

这很正常,但是我遇到了一个问题。 我有一个列有一个非常长的数字,可能在前面是零,我需要它被input并显示为文本。 如果我做了一个特定的单元格查找,如:

 var cell = range["U34"].Value; 

数据已经变成科学记数法,所以没有多less格式化之后修复它。 我尝试了SetDataFlags.AllText,这很好,除了打破了工作表的其余部分,因为所有的数字都以文本forms存储,这是不可接受的。

我不知道如何解决这个问题。

解决scheme:因为我只是想改变一列,如果它是存在的,并且很多列是dynamic的,我去“预格式化”的路线。 从数据表中find列索引:

 int ColumnIndex = -1; for (int x = 0; x < dataTable.Columns.Count; x++) { if (dataTable.Columns[x].ColumnName.Equals("Whatever")) { ColumnIndex = x; } } worksheet.Cells[0, ColumnIndex, 0, ColumnIndex].EntireColumn.NumberFormat = "@"; 

然后执行CopyFromDataTable,将Flags设置为None,一切都完美无瑕!

IRange。 CopyFromDataTable (…)方法可以传入SetDataFlags.InsertCells枚举选项,它允许您预先格式化您的目标范围,以便插入的DataTable数据选取您指定的格式。 这种格式包括一个单元格的IRange。 NumberFormat ,可以设置为“@”,并指定该单元格的input应该被视为文本。

所以,如果你知道哪些列会有这些exception大的数字来触发科学记数法,另一个select是使用IRange.NumberFormat = "@"预先格式化工作表的目的地范围,并保留这些列的值。

请参阅IRange的文档。 CopyFromDataTable (…)方法,因为它提供了什么范围需要这个“预格式化”的重要信息。 此外,假设您已经在您的机器上安装了SpreadsheetGear,请查看SpreadsheetGear Explorer for C#/ VB(在“开始”菜单下的“SpreadsheetGear”文件夹中find的解决scheme)中的Reporting> DataSet to Workbook示例,以获取此SetDataFlags .InsertCells选项。