3

Excel で GridLines を無効にし、C# で open xml を使用して 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);

これは、最初の (既定の) ワークブック ビューを使用します。Workbook の子である BookViews クラスの WorkbookView の子を明示的に作成する必要はありません。もちろん、あなたがしたくない場合を除きます。:)

于 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 をお楽しみください。ただし、Microsoft は非常に強力なドキュメントを提供していません。

于 2014-01-08T06:04:43.277 に答える