excel的当前格式在 Closedxml SaveAs 方法中发生变化

Posted

技术标签:

【中文标题】excel的当前格式在 Closedxml SaveAs 方法中发生变化【英文标题】:Current Format of excel getting changed in Closedxml SaveAs method 【发布时间】:2017-02-26 05:07:33 【问题描述】:

在我的 C# 应用程序中,我使用 ClosedXml .Excel 处理 excel 文件。 我有一个 excel 模板,我将模板添加到应用程序中,并将数据添加到 excel 表中并保存 excel,如下所示,

wb = new XLWorkbook(exportOption.FileName);
---
if (wb.Worksheets.Count > 0)

    for (int i = 0; i < wb.Worksheets.Count; i++)
    
        using (var ws = wb.Worksheet(i + 1))
        
            if (ws.Visibility == XLWorksheetVisibility.Visible)
            
                ws.SetTabActive();
                break;
            
        
    


try

    wb.CalculateMode = XLCalculateMode.Auto;
    wb.SaveAs(exportOption.FileName);

保存更改后,我的 excel 格式也与其他工作表完全更改。 例如,在一张纸中,我有百分比格式,它会更改为日期格式。 我怎样才能保持excel的格式相同,只需将数据插入其他工作表。

【问题讨论】:

向我们展示您如何在电子表格中设置值。另外我认为您没有指定任何单元格格式,明确设置单元格格式会有所不同吗? 我也有同样的问题。我有一个 xlsm 文件,我只是用 ClosedXML 打开并保存它。一些格式被破坏,文件也变小了。 【参考方案1】:

Excel 经常被欺骗将数字视为日期(就像 Excel 将日期存储为数字一样)。要强制单元格为数字而不是日期,请尝试:

ws.Cell(row,col).SetValue<double>(Convert.ToDouble(val));

这是ClosedXML Cell Formatting 上的官方文档。 如果您需要将格式保留为百分比,例如“#.##%”,只需设置单元格格式:

ws.Cell(row, col).Style.NumberFormat.NumberFormatId = 10;

或未经测试

ws.Cell(row, col).Style.NumberFormat.Format = "0.0%"; 

【讨论】:

感谢您的回答。实际上,我不会知道 excel 表中包含的格式是什么。所以问题是当我保存 excel 时,我想保留在我没有处理的工作表中应用的格式。 抱歉,我不是 100% 理解。 能否请edit 您的问题包含屏幕截图以显示问题?【参考方案2】:

您必须在保存之前从您的应用中选择单元格数字格式。 CLosedXml 是基于 OPENXML 库的库,因此您必须应用 OpenXml excel 样式表来更改单元格编号格式。

这是一个Article,可能会对您有所帮助

【讨论】:

以上是关于excel的当前格式在 Closedxml SaveAs 方法中发生变化的主要内容,如果未能解决你的问题,请参考以下文章

使用 closedxml 从 web api 下载 excel 文件

显示/交互/可见 ClosedXML Excel.XLWorkbook 不保存

csharp [Excel帐票] EXCELで帐票出力するときに使えるかも。#ClosedXML

.Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)

ALLEGRO+异常关闭,sav文件 如何恢复pcb

csharp [ClosedXMLでExcel帐票] Excelで帐票のテンプレートを作成しておくことで,Excel帐票を作成します。ヘッダやフッタはExcelに记载した$ {templatename