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

时间:2017-10-04 14:36:50

标签: vb.net excel-2010 openxml openxml-sdk

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

但是我无法正确添加网格线的PrintOptions 根据{{​​3}},PrintOptions是工作表的一个叶子,但DocumentFormat.OpenXml.Spreadsheet.WorkSheet命名空间不包含附加PrintOptions的函数,并且使用.Append()或.AppendChild()将导致电子表格损坏。

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

我还使用OpenXML Productivity Tool来比较我自己创建的Spreadsheet和Excel 2010中的Spreadsheet,我注意到我的电子表格和Excel之间的唯一区别是我的xml命名空间,而Excel没有。< / p>

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

2 个答案:

答案 0 :(得分:0)

来自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

答案 1 :(得分:0)

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

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

如果您想在横向,FitToWidth和网格线中使用电子表格,这是正确的插入方式:

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)