使用 openxml 在新的 excel 文档中禁用网格线

问题描述

我无法为我在内存中创建的新 Excel 文档禁用网格线。

using(var stream = new MemoryStream())
using (var spreadsheetDocument = SpreadsheetDocument.Create(stream,DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook))
{
    var sheetName = "some name";
    var workbookPart = spreadsheetDocument.CreateSpreadsheetWorkbook(sheetName);

    var sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(x => x.Name == sheetName);

    var worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);
    var sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

    worksheetPart.RemoveGridlines();

    worksheetPart.Worksheet.Save();
    workbookPart.Workbook.Save();
    spreadsheetDocument.Close();

    stream.Position = 0;
    return stream.ToArray();
}

public static class ExcelHelper
{
    public static WorkbookPart CreateSpreadsheetWorkbook(this SpreadsheetDocument spreadsheetDocument,params string[] sheetNames)
    {
        // Add a WorkbookPart to the document.
        WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
        workbookpart.Workbook = new Workbook(new BookViews(new WorkbookView()));

        // Add a WorksheetPart to the WorkbookPart.
        WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
        worksheetPart.Worksheet = new Worksheet(new SheetData());

        // Add Sheets to the Workbook.
        Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
            AppendChild(new Sheets());

        foreach(var sheetName in sheetNames)
        {
            // Append a new worksheet and associate it with the workbook.
            sheets.Append(new Sheet()
            {
                Id = spreadsheetDocument.WorkbookPart.
                GetIdOfPart(worksheetPart),SheetId = (uint)Array.IndexOf(sheetNames,sheetName) + 1,// assume all sheet names are unique,zero id cause file corruption
                Name = sheetName
            });

        }

        return workbookpart;
    }

    public static void RemoveGridlines(this WorksheetPart worksheetPart)
    {
        var sheetViews = new SheetViews();

        SheetView sheetView = new SheetView() { 
            ShowGridLines = false,WorkbookViewId = 0U
        };

        sheetViews.Append(sheetView);

        worksheetPart.Worksheet = new Worksheet(sheetViews);
    }
}

当我尝试打开生成的 excel 文档时出现以下错误

<repairedParts><repairedPart>Repaired Part: /xl/worksheets/sheet1.xml part with XML error.  Catastrophic failure Line 1,column 214.</repairedPart></repairedParts>

没有 RemoveGridlines() 调用一切正常。我用过这个 topic,但它对我没有帮助。 Microsoft 文档没有为此提供任何有用的信息。有什么解决办法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)