ClosedXML - 保存

时间:2018-04-13 09:59:22

标签: c# excel closedxml

我正在使用ClosedXML来更改XLSX文件中某些单元格的值。这些单元格用于在另一张纸上生成图表。

我没有用ClosedXML触摸图表。事实上,我甚至没有触及包含它的工作表,我只是改变了一些数据单元的值,如下所示:

var workbook = new XLWorkbook(@"C:\path\to\my\file.xlsx");
var dataWorksheet = workbook.Worksheet("data");
var cell = dataWorksheet.Cell(1, 2);
cell.Value = 30;
workbook.Save();

然而,当我在Excel中重新打开文件时,另一张纸上的图表(我根本没有碰过)只是消失了,纸张会留空。

我知道ClosedXML不支持创建图表,但有没有办法避免在保存时丢失它们?

1 个答案:

答案 0 :(得分:0)

不幸的是,这是对ClosedXML的限制,项目页面上有一些“图表”请求:
https://github.com/ClosedXML/ClosedXML/issues?utf8=%E2%9C%93&q=is%3Aissue+chart

但是担心XLSX格式不是很简单!它只是一堆压缩的文件 我们仍然可以使用ClosedXML编辑该工作表将其保存为临时文件,然后替换原始文件上的工作表,这是我的代码:

using ClosedXML.Excel;
using Ionic.Zip;
using System.IO;
using System.Linq;

namespace ExcelTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string file = @"..\..\file.xlsx";
            ClosedXMLTest(file);
        }

        static void ClosedXMLTest(string file)
        {
            string outFile = "fileClosedXML.xlsx";

            var workbook = new XLWorkbook(file);
            var dataWorksheet = workbook.Worksheet("data");
            for (int i = 1; i < 10; i++)
                dataWorksheet.Cell(i, i).Value = i;
            workbook.SaveAs(outFile);

            ReplaceSheet(outFile, file, "xl/worksheets/sheet1.xml");
        }

        static void ReplaceSheet(string outputFile, string inputFile, string sheetName)
        {
            using (var ozip = new ZipFile(outputFile))
            using (var izip = new ZipFile(inputFile))
            {
                var osheet = ozip.Entries.Where(x => x.FileName == sheetName).FirstOrDefault();
                var tempS = new MemoryStream();
                osheet.Extract(tempS);

                var isheet = izip.Entries.Where(x => x.FileName == sheetName).FirstOrDefault();
                izip.RemoveEntry(isheet);
                izip.AddEntry(isheet.FileName, tempS.ToArray());
                izip.Save();
            }
        }
    }
}

我在这里有完整的项目: https://github.com/heldersepu/csharp-proj/tree/master/ExcelTest