Gembox 在另存为 CSV 时删除了精度
Gembox removes precision when saving as CSV
我正在使用 Gembox 电子表格将一些数据导出到 .CSV,但在输出文件中没有得到任何小数。
当导出为 XLSX 时,一切看起来都符合预期。
我已经尝试了 Gembox 3.7 和 3.9,但结果是一样的。
使用以下代码重现问题。
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
var ef = new ExcelFile();
var ws = ef.Worksheets.Add("NumberFormatTest");
ws.Cells[0, 0].Value = "Expected";
ws.Cells[1, 0].Value = "0";
ws.Cells[2, 0].Value = "0.0";
ws.Cells[3, 0].Value = "0.00";
ws.Cells[0, 1].Value = "Actual";
ws.Cells[1, 1].Value = 0m;
ws.Cells[1, 1].Style.NumberFormat = "0";
ws.Cells[2, 1].Value = 0m;
ws.Cells[2, 1].Style.NumberFormat = "0.0";
ws.Cells[3, 1].Value = 0m;
ws.Cells[3, 1].Style.NumberFormat = "0.00";
ef.Save("Numberformat test.csv");
ef.Save("Numberformat test.xlsx");
如何在不求助于 .ToString("0.00")
的情况下获得正确的结果?
如果其他人感兴趣。我联系了他们的支持人员,他们告诉我数字格式当前未导出为 CSV 文件格式,应该使用以下解决方法。
foreach (var row in ws.Rows)
foreach (var cell in row.AllocatedCells)
if (cell.Value != null)
cell.Value = cell.GetFormattedValue();
ef.Save("Numberformat test.csv");
澳大利亚 VB 用户
Dim enAU As CultureInfo = CultureInfo.CreateSpecificCulture("en-AU")
Dim SaveOptions As New CsvSaveOptions(CsvType.CommaDelimited)
With SaveOptions
.FormatProvider = enAU
End With
For Each row In ws.Rows
For Each cell In row.AllocatedCells
If Not (String.IsNullOrEmpty(cell.Value)) Then
cell.Value = cell.GetFormattedValue()
End If
Next
Next
ws.Save(sSaveAsFullFilename, New CsvSaveOptions(CsvType.CommaDelimited) With {.FormatProvider = enAU})
对于较新的版本(GemBox.Spreadsheet 4.5 及更高版本),这可以通过使用 CsvSaveOptions.UseFormattedValues
属性.
来简化
例如,像这样:
var options = new CsvSaveOptions(CsvType.CommaDelimited);
options.UseFormattedValues = true;
ef.Save("Numberformat test.csv", options);
我正在使用 Gembox 电子表格将一些数据导出到 .CSV,但在输出文件中没有得到任何小数。
当导出为 XLSX 时,一切看起来都符合预期。
我已经尝试了 Gembox 3.7 和 3.9,但结果是一样的。
使用以下代码重现问题。
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
var ef = new ExcelFile();
var ws = ef.Worksheets.Add("NumberFormatTest");
ws.Cells[0, 0].Value = "Expected";
ws.Cells[1, 0].Value = "0";
ws.Cells[2, 0].Value = "0.0";
ws.Cells[3, 0].Value = "0.00";
ws.Cells[0, 1].Value = "Actual";
ws.Cells[1, 1].Value = 0m;
ws.Cells[1, 1].Style.NumberFormat = "0";
ws.Cells[2, 1].Value = 0m;
ws.Cells[2, 1].Style.NumberFormat = "0.0";
ws.Cells[3, 1].Value = 0m;
ws.Cells[3, 1].Style.NumberFormat = "0.00";
ef.Save("Numberformat test.csv");
ef.Save("Numberformat test.xlsx");
如何在不求助于 .ToString("0.00")
的情况下获得正确的结果?
如果其他人感兴趣。我联系了他们的支持人员,他们告诉我数字格式当前未导出为 CSV 文件格式,应该使用以下解决方法。
foreach (var row in ws.Rows)
foreach (var cell in row.AllocatedCells)
if (cell.Value != null)
cell.Value = cell.GetFormattedValue();
ef.Save("Numberformat test.csv");
澳大利亚 VB 用户
Dim enAU As CultureInfo = CultureInfo.CreateSpecificCulture("en-AU")
Dim SaveOptions As New CsvSaveOptions(CsvType.CommaDelimited)
With SaveOptions
.FormatProvider = enAU
End With
For Each row In ws.Rows
For Each cell In row.AllocatedCells
If Not (String.IsNullOrEmpty(cell.Value)) Then
cell.Value = cell.GetFormattedValue()
End If
Next
Next
ws.Save(sSaveAsFullFilename, New CsvSaveOptions(CsvType.CommaDelimited) With {.FormatProvider = enAU})
对于较新的版本(GemBox.Spreadsheet 4.5 及更高版本),这可以通过使用 CsvSaveOptions.UseFormattedValues
属性.
例如,像这样:
var options = new CsvSaveOptions(CsvType.CommaDelimited);
options.UseFormattedValues = true;
ef.Save("Numberformat test.csv", options);