在 OpenXML 电子表格中打印网格线

Print gridlines in OpenXML Spreadsheet

我当前的任务包括以编程方式生成具有各种功能的 .xslx 文件,例如自动筛选或使用 Excel 2010 在打印时显示网格线。

但是我未能正确添加网格线的打印选项。
根据 MSDN Dokumentation,PrintOptions 是 Worksheet 的叶子,但 DocumentFormat.OpenXml.Spreadsheet.WorkSheet Namespace 不包含附加 PrintOptions 的函数,使用 .Append() 或 .AppendChild() 将导致损坏的电子表格。

Dim po = New PrintOptions With {.GridLines = True}  
sheetPart.Worksheet.Append(po)

我还使用 OpenXML Productivity Tool 将我自己创建的电子表格与 Excel 2010 年创建的电子表格进行比较,我注意到我的电子表格和 Excel 之间的唯一区别是我的电子表格有xml-命名空间,而 Excel 则没有。

有人可以告诉我将 PrintOptions 插入电子表格的正确方法是什么吗?我现在在这两条线上花了几天时间。

来自 Vincent Tan 的 SpreadsheetOpenXmlFromScratch:

Dim po As New PrintOptions()
po.HorizontalCentered = True
po.VerticalCentered = True
' print the row (1,2,3,...) and column (A,B,C,...) headings
po.Headings = True
' print the grid lines
**po.GridLines = True
' By default, GridLinesSet is true.
' Only when both GridLines and GridLinesSet are true, then grid lines are printed.**
' I don't know why there's an additional flip switch...
po.GridLinesSet = True
ws.Append(po)

您的代码没有显示您处理 GridLinesSet = true

显然有一个必须插入元素的顺序。

如果您的工作表中有 PageSetup 元素,则必须将其附加在 PrintOptions 之后,否则您将在 Office 2010 中得到损坏的电子表格。

如果您想要横向、适合宽度和网格线的电子表格,这是正确的插入方式:

Dim po = New PrintOptions With {.GridLines = True}
sheetPart.Worksheet.Append(po)

Dim ps = New PageSetup With {.Orientation = OrientationValues.Landscape} 
Dim sp As New SheetProperties
sp.PageSetupProperties = New PageSetupProperties With {.FitToPage = True}
sheetPart.Worksheet.SheetProperties = sp
ps.FitToWidth = CUInt(1)
ps.FitToHeight = CUInt(0)
sheetPart.Worksheet.Append(ps)