Таблица AutoFitBehavior не работает в Word Document - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь разработать функцию печати в приложении 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 профессиональный плюс 2016

РЕДАКТИРОВАТЬ - Ответ :

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

1 Ответ

0 голосов
/ 10 ноября 2018

Вы можете попробовать установить ширину столбцов самостоятельно. Возможно, что-то вроде этого:

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

Вам, конечно, придется поэкспериментировать с процентами, прежде чем вы думаете, что это выглядит хорошо ..

...