简体   繁体   English

如何使用OpenXML SDK隐藏Excel网格线

[英]How to hide excel gridlines using OpenXML SDK

Im using OpenXML SDK 2.5 for creating excel file. 我使用OpenXML SDK 2.5创建Excel文件。 I want to hide gridlines on created excel files.I was tried creating SheetViews but it completely hide sheet. 我想隐藏创建的Excel文件上的网格线。我曾尝试创建SheetViews,但它完全隐藏了图纸。 My pure code as below 我的纯代码如下

public static SpreadsheetDocument CreateWorkbook(MemoryStream memoryStream)
    {
        var spreadSheet = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook);

        spreadSheet.AddWorkbookPart();
        spreadSheet.WorkbookPart.Workbook = new Workbook();
        spreadSheet.WorkbookPart.Workbook.Save();

        var sharedStringTablePart = spreadSheet.WorkbookPart.AddNewPart<SharedStringTablePart>();
        sharedStringTablePart.SharedStringTable = new SharedStringTable();
        sharedStringTablePart.SharedStringTable.Save();

        spreadSheet.WorkbookPart.Workbook.Sheets = new Sheets();
        spreadSheet.WorkbookPart.Workbook.Save();

        var workbookStylesPart = spreadSheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
        workbookStylesPart.Stylesheet = new Stylesheet();
        workbookStylesPart.Stylesheet.Save();

        memoryStream.Seek(0, SeekOrigin.Begin);

        return spreadSheet;
    } 

    public static bool AddWorksheet(SpreadsheetDocument spreadsheet, string name)
    {
        Sheets sheets = spreadsheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();

        var worksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
        worksheetPart.Worksheet = new Worksheet(new SheetData());

        worksheetPart.Worksheet.Save();

        var sheet = new Sheet()
        {
            Id = spreadsheet.WorkbookPart.GetIdOfPart(worksheetPart),
            SheetId = (uint)(spreadsheet.WorkbookPart.Workbook.Sheets.Count() + 1),
            Name = name
        };
        if (string.IsNullOrEmpty(name)) {
            sheet.Name = string.Format("Sheet{0}", sheet.SheetId);
        }
        sheets.Append(sheet);
        spreadsheet.WorkbookPart.Workbook.Save();

        return true;
    }

After that im creating instance of spreadsheet in memory 之后,我在内存中创建电子表格实例

//Creating like that
        var memoryStream = new MemoryStream();
        var spreadsheet = CreateWorkbook(memoryStream);       
        AddWorksheet(spreadsheet, null);
//End Filling data

After some check i decide to, when you use the column you couldnt hide gridlines. 经过一些检查后,我决定使用列时您无法隐藏网格线。 You should only cell for showing data. 您应该只显示数据的单元格。 But that time you couldnt change width property bacause column doesnt extist :) 但是那一次你不能改变width属性,因为列不存在:)

Okay. 好的。 First be sure your pure works properly and generates valid workbook. 首先,请确保您的pure正常工作并生成有效的工作簿。 After that you can apply code: 之后,您可以应用代码:

 SheetViews sheetViews = new SheetViews();

 SheetView sheetView = new SheetView(){ ShowGridLines = false, TabSelected = true, ZoomScaleNormal = (UInt32Value)100U, WorkbookViewId = (UInt32Value)0U };
 Selection selection = new Selection(){ ActiveCell = "A1", SequenceOfReferences = new ListValue<StringValue>() { InnerText = "A1" } };

 sheetView.Append(selection);
 sheetViews.Append(sheetView);
 worksheet.Append(sheetViews);

Be sure that your sheetViews block is placed before sheetdata, or you will have corrupt document. 确保将sheetViews块放置在sheetdata之前,否则文档将损坏。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM