3

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

我已经尝试使用下面的代码,但是当我打开 Excel 时抛出异常,异常是“修复部分:/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();
4

2 回答 2

4

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

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

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

于 2013-01-21T12:26:16.757 回答
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,但微软没有提供非常强大的文档。

于 2014-01-08T06:04:43.277 回答