在C#中,我有一个DataTable,它有一些有效的值,其中一些是指数格式的。我使用ExtremeML(我认为它基于OpenXML)和以下代码将此DataTable导出到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文件应该格式化它们。
有关此问题原因的任何想法? (另外,我知道代码对于grok来说是一种痛苦的代价 - 代码不是我的代码,而且我还没有去清理程序。)
答案 0 :(得分:2)
您的示例代码似乎没问题。
这看起来像ExtremeML转换双打的方式中的错误。如你所说,它似乎只会影响负指数负数。
我正在调试它并创建其他单元测试以涵盖这些场景,之后我将更新的代码提交到CodePlex并在此处发布更新。
编辑:此错误现已修复。您需要从CodePlex下载并构建ExtremeML源代码,因为运行时版本当前不是最新的。