微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。