【发布时间】:2014-07-01 20:28:44
【问题描述】:
我正在尝试这样做:
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,一切都完美了!
【问题讨论】:
标签: c# excel datatable spreadsheetgear