ExtremeML负指数出口问题

时间:2011-03-07 19:03:59

标签: c# .net excel datatable openxml

在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来说是一种痛苦的代价 - 代码不是我的代码,而且我还没有去清理程序。)

1 个答案:

答案 0 :(得分:2)

您的示例代码似乎没问题。

这看起来像ExtremeML转换双打的方式中的错误。如你所说,它似乎只会影响负指数负数。

我正在调试它并创建其他单元测试以涵盖这些场景,之后我将更新的代码提交到CodePlex并在此处发布更新。

编辑:此错误现已修复。您需要从CodePlex下载并构建ExtremeML源代码,因为运行时版本当前不是最新的。