如何使用open xml C#在Excel中禁用网格线?

时间:2013-01-09 07:52:02

标签: excel c#-3.0 openxml formats gridlines

我想在Excel中禁用GridLines并使用C#中的open xml将自定义边框放到excel单元格中

我尝试使用以下代码,但在打开excell时抛出异常, 例外情况是“修复的部分:/xl/worksheets/sheet.xml部分有XML错误。加载错误。第1行,第0列。”

                using (SpreadsheetDocument xl = SpreadsheetDocument.Create(sFile, SpreadsheetDocumentType.Workbook))
            {
                WorkbookPart wbp = xl.AddWorkbookPart();
                WorksheetPart wsp = wbp.AddNewPart<WorksheetPart>();
                Workbook wb = new Workbook();
                FileVersion fv = new FileVersion();
                fv.ApplicationName = "Microsoft Office Excel";
                Worksheet ws = new Worksheet();
                SheetViews sheetViews = new SheetViews();

                SheetView sheetView = new SheetView();
                sheetView.ShowGridLines = new BooleanValue(false);
                sheetViews.Append(sheetView);
                ws.Append(sheetViews);

                WorkbookStylesPart wbsp = wbp.AddNewPart<WorkbookStylesPart>();
                //// add styles to sheet
                wbsp.Stylesheet = CreateStylesheet();
                wbsp.Stylesheet.Save();
                //// add styles to sheet
                ////wbsp.Stylesheet = GenerateStyleSheet();


                //wbsp.Stylesheet.Save();
                Columns columns = new Columns();
                columns.Append(CreateColumnData(1, 1, 25));
                ws.Append(columns);

                //// generate rows
                SheetData sd = CreateSheetData(products);
                ws.Append(sd);
                wsp.Worksheet = ws;
                wsp.Worksheet.Save();

                MERGEiNITIALcELLS(wsp);

                wb.Append(fv);
                CreateSheet(wbp, wsp, wb);
                xl.WorkbookPart.Workbook = wb;
                xl.WorkbookPart.Workbook.Save();


                xl.Close();

2 个答案:

答案 0 :(得分:4)

SheetView类的WorkbookViewId属性是必需的属性/属性。试试这个:

SheetView sheetView = new SheetView();
sheetView.ShowGridLines = new BooleanValue(false);
sheetView.WorkbookViewId = 0;
sheetViews.Append(sheetView);
ws.Append(sheetViews);

使用第一个(默认)工作簿视图。不用担心,您不必显式创建BookViews类的WorkbookView子级,它是Workbook的子级。当然,除非你想要。 :)

答案 1 :(得分:2)

我试过这种方式,但它失败但能够识别缺失的东西。默认情况下,从头开始创建电子表格时,没有默认的工作簿视图。因此需要创建新的工作簿视图。

spreadSheet.WorkbookPart.Workbook = new Workbook(new BookViews(new WorkbookView()));

然后创建工作表视图。

worksheetPart.Worksheet = new Worksheet(new SheetViews(new SheetView(){WorkbookViewId=0,ShowGridLines=new BooleanValue(false)}), new SheetData());

注意:在excel工作簿中创建列时,应按顺序创建元素。序列是

  • 工作表视图
  • 工作表视图格式
  • 工作表数据

享受Open XML SDK,但Microsoft不提供非常强大的文档。