电子表格设备为特定列设置数据标志

本文关键字:置数据 标志 电子表格 | 更新日期: 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选项。