电子表格设备为特定列设置数据标志
本文关键字:置数据 标志 电子表格 | 更新日期: 2023-09-27 18:11:07
我正在尝试这样做:
IWorksheet worksheet = Factory.GetWorkbook().Worksheets[0];
IRange range = worksheet.Cells["A1"];
range.CopyFromDataTable(dataTable, SetDataFlags.None);
worksheet.Cells.Columns.AutoFit();
return worksheet;
这工作很正常,但我遇到了一个问题。我有一个列,有一个很长的数字,可能与零在前面,我需要它被输入并显示为文本。如果我对特定单元格进行查找,比如:
var cell = range["U34"].Value;
数据已经被转换成科学记数法,所以没有任何格式化之后修复它。我尝试了setdatafags。全文本,这工作得很好,除了它破坏了工作表的其余部分,因为所有的数字都存储为文本,这是不可接受的。
我不知道如何解决这个问题。
解决方案:因为我只是想改变一列,如果它存在并且很多列是动态的,我就采用"预格式化"路线。从数据表中查找列索引:
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(…)方法可以在setdataflag中传递。InsertCells enum选项,它允许您预格式化目标区域,以便插入的DataTable数据采用您指定的格式。此格式包括单元格的范围。NumberFormat,它可以设置为"@",并指定该单元格的输入应该被视为文本。
因此,如果您知道哪些列将具有触发科学记数法的异常大的数字,另一种选择是使用IRange.NumberFormat = "@"
预格式化工作表的目标范围,并将保留这些列的值。
请参阅IRange.CopyFromDataTable(…)方法的文档,因为它提供了关于哪些范围需要这种"预格式化"的重要信息。此外,假设您已经在机器上安装了SpreadsheetGear,请查看c#/VB的SpreadsheetGear资源管理器解决方案中的Reporting> DataSet to Workbook示例(在开始菜单下的"SpreadsheetGear"文件夹中找到)以获取此setdatafags的实时演示。InsertCells选项。