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

时间:2014-07-01 20:28:44

标签: c# excel datatable spreadsheetgear

我正在尝试这样做:

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;

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

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

解决方案: 由于我只想改变一个专栏,如果它已经存在并且很多专栏都是动态的,那么我选择"预先格式化"路线。从数据表中查找列索引:

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,一切都很完美!

1 个答案:

答案 0 :(得分:1)

IRange。CopyFromDataTable(...)方法可以在SetDataFlags。InsertCells枚举选项中传递,该选项允许您预先格式化目标范围,以便插入的DataTable数据可以获取您指定的格式。这种格式包括一个单元格的IRange。NumberFormat,可以设置为&#34; @&#34;并指定应将该单元格的输入视为Text。

因此,如果您知道哪些列会有这些异常大的数字触发科学记数法,另一种选择是使用IRange.NumberFormat = "@"预先设置工作表的目标范围格式,并保留您的值这些列是按原样的。

请参阅IRange。CopyFromDataTable(...)方法的文档,因为它提供了有关此格式需要的重要信息&#34;预格式化。&#34;另外,假设您已在自己的计算机上安装了SpreadsheetGear,请查看报告&gt;用于C#/ VB的SpreadsheetGear Explorer解决方案中的DataSet to Workbook 示例(位于“开始菜单”下的“#34; SpreadsheetGear&#34;文件夹”中),用于此SetDataFlags的插入式插件选项。