在C#中,我有一个具有有效值的DataTable,其中一些值为指数格式。我使用ExtremeML(我相信它基于OpenXML)和以下代码将此数据表导出到xlsx文件:
if (!Directory.Exists(savePath.Text))
Directory.CreateDirectory(savePath.Text);
using (var package = SpreadsheetDocumentWrapper.Create(savePath.Text + fileName + ".xlsx"))
{
for (int i = 0; i < dataset.Tables.Count; i++)
{
// declares worksheet
var part = package.WorkbookPart.WorksheetParts.Add(dataset.Tables[i].TableName.ToString()); // second worksheet filled by second collection
bool first = true;
int position = 0;
for (int row = 0; row < dataset.Tables[i].Rows.Count; row++)
{
for (int col = 0; col < dataset.Tables[i].Columns.Count; col++)
{
// adds to file
if (first)
part.Worksheet.SetCellValue(new GridReference(row, col), dataset.Tables[i].Columns[col].ColumnName.ToString());
else
part.Worksheet.SetCellValue(new GridReference(row, col), dataset.Tables[i].Rows[position][col]);
}
if (first)
{
first = false;
}
else
position++;
}
}
}
生成的Excel文件几乎可以接受,除了负指数负数
(例如-7.45E-05)将负号视为数字(以前的示例为0.000-745)。在DataTable中,所有列均设置为双精度,因此excel文件应将其格式化。
关于这个问题的原因有什么想法吗?
(此外,我知道该代码很难理解-该代码不是我的代码,并且我还没来得及清理程序。)
最佳答案
您的示例代码似乎很好。
这看起来像是ExtremeML转换双打方式的错误。如您所说,它似乎只影响负指数负数。
我目前正在调试它,并创建其他单元测试来涵盖这些情况,之后,我将把更新的代码提交给CodePlex并在此处发布更新。
编辑:此错误现已修复。由于运行时版本当前不是最新的,因此您需要从CodePlex下载并构建ExtremeML源代码。
关于c# - ExtremeML负指数导出问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5223956/