在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/

10-12 14:43