我正在使用带有c#的Spire Xls来创建Excel文档。问题出在我的一个列上,即一个十六进制字符串。在大多数情况下,列的单元格是可以的,但是,当十六进制字符串仅包含数字(和“E”字符)时,那些单元格以数字格式显示
示例:
92995E85(原始字符串) - > 9.2995E + 89(细胞结果)
我想将原始字符串保留在单元格中。
这是我的代码:
Workbook workbook = new Workbook();
workbook.Version = ExcelVersion.Version2013;
var ws = workbook.ActiveSheet;
ws.InsertDataTable(report, true, 1, 1);
for (int i = 1; i <= 9; i++)
ws.AutoFitColumn(i);
using (var fs = new FileStream(options.ReportPath.Trim(), FileMode.Create))
{
//cerrar bien el filestream para q escriba a disco
workbook.SaveToStream(fs);
workbook.Dispose();
}
report
变量是DataTable
,其中有问题的列为字符串。
答案 0 :(得分:0)
我使用Spire.XLS测试但无法重现该问题。我建议你将数字格式设置为文本,然后重试。这是我的代码:
{
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
DataTable dt = GetData();
//Set the number format of the first column as text
//sheet.Columns[0].NumberFormat = "@";
sheet.InsertDataTable(dt, false, 1, 1, false);
workbook.SaveToFile("InsertData.xlsx", ExcelVersion.Version2010);
}
private static DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("column1", typeof(string));
dt.Columns.Add("column2", typeof(DateTime));
DataRow row = dt.NewRow();
row[0] = "92995E85";
row[1] = "00:00";
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "333";
//row[1] = "2";
dt.Rows.Add(row);
return dt;
}