表AutoFitBehavior在Word文档中不起作用

时间:2018-11-10 11:41:53

标签: vba vbscript ms-word word-vba

我正在尝试在Java Swing桌面应用程序中开发打印功能。我需要的只是基本的打印,因此不需要外部库或其他东西。我的应用程序仅适用于Windows,因此没有什么可以阻止我使用VBS文件来生成Word(.docx)文档并仅打印它。

问题是我需要打印一张桌子。我的应用程序生成以下脚本(忽略字段,文本等)。

Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add()
objWord.Visible = False
Set objSelection = objWord.Selection

Set objSection = objDoc.Sections(1)
objDoc.Sections(1).Footers(1).Range.ParagraphFormat.Alignment = 0
objDoc.Sections(1).Footers(1).Range.Bold = True
objDoc.Sections(1).Footers(1).Range.Text = ""


objSelection.Font.Bold = True
objSelection.Font.Underline = True
objSelection.ParagraphFormat.Alignment = 1
objSelection.Font.Size = "14"
objSelection.TypeText "I am a title"
objSelection.TypeParagraph()
objSelection.Font.Underline = False

objSelection.Font.Size = "12"
Const NUMBER_OF_ROWS = 2
Const NUMBER_OF_COLUMNS = 4
Set objRange = objDoc.Range()
objrange.Collapse wdCollapseEnd 
objDoc.Tables.Add objRange, NUMBER_OF_ROWS, NUMBER_OF_COLUMNS
Set objTable = objDoc.Tables(1)
objTable.Style = "Πλέγμα Πίνακα" 'Greek MS Word needs style name on greek. "Table Grid" is the english one
objTable.Cell(1, 1).Range.Text = "Description"
objTable.Cell(1, 2).Range.Text = "Date"
objTable.Cell(1, 3).Range.Text = "Count"
objTable.Cell(1, 4).Range.Text = "Notes"


objTable.Cell(2, 1).Range.Text = "Hello there i am"+Chr(13)+"a big text"+Chr(13)+"but i am far bigger than you"
objTable.Cell(2, 2).Range.Text = "10/11/2018"
objTable.Cell(2, 3).Range.Text = "10.000"
objTable.Cell(2, 4).Range.Text = "nothing here"

objSelection.Tables(1).Select
objSelection.Collapse wdCollapseEnd

objDoc.SaveAs("C:\Users\George\AppData\Local\Temp\AAA - 13213908551013013192846.docx")

objWord.Quit

有了这个脚本,我得到了this table

我想要实现的是:this.

为了获得第二张图片中的表格,我从MS Word中执行了以下步骤。 右键单击表->自动调整->使用内容自动调整,然后再次右键单击表->自动调整->窗口中的自动调整

因此,我猜想通过MS Word的“创建宏”操作记录这些步骤会给我答案。它为这些行“赋予了我”:

objSelection.Tables(1).AutoFitBehavior (wdAutoFitContent)
objSelection.Tables(1).AutoFitBehavior (wdAutoFitWindow)

我在“另存为...”之前在脚本中添加了它们,但是对该表没有任何更改。所以....我在想,我还有什么需要做的,还是我做错了什么?我对VBA不熟悉。

操作系统:Windows 10 x64

MS-Office:Microsoft Office Professional Plus 2016

编辑-答案

objSelection.Tables(1).AutoFitBehavior (1) 'word VBA does not support enumerations
objSelection.Tables(1).Rows.Alignment = 1

1 个答案:

答案 0 :(得分:0)

您可以尝试自己设置列的宽度。也许是这样的:

Set objTable = objDoc.Tables(1)

With objTable
    .Style = "Πλέγμα Πίνακα"
    .PreferredWidthType = wdPreferredWidthPercent
    .PreferredWidth = 100
    .Columns(1).Width = 40
    .Columns(2).Width = 20
    .Columns(3).Width = 15
    .Columns(4).Width = 25
    .Cell(1, 1).Range.Text = "Description"
    .Cell(1, 2).Range.Text = "Date"
    .Cell(1, 3).Range.Text = "Count"
    .Cell(1, 4).Range.Text = "Notes"
    .Cell(2, 1).Range.Text = "Hello there i am"+Chr(13)+"a big text"+Chr(13)+"but i am far bigger than you"
    .Cell(2, 2).Range.Text = "10/11/2018"
    .Cell(2, 3).Range.Text = "10.000"
    .Cell(2, 4).Range.Text = "nothing here"
    .AutoFitBehavior (wdAutoFitWindow)
End With

您必须先尝试一下百分比,然后才能认为它看起来不错。.