Текст центру в документі Word


0

Я працюю над сценарієм, який створює документ Word, але я не можу змусити текст вирівнюватися по центру. Ось приклад коду, який я використовую. (VBScript)

set objword = createobject("word.application")
set doc = objword.documents.add
set selection = objword.selection
selection.Font.name = "arial" 
selection.Font.size = "20"
selection.Font.Bold = true
selection.Paragraphs.Alignment = wdAlignParagraphCenter
selection.typetext "This is the title that should be centered"
selection.typeparagraph
doc.saveas("testdoc.doc")
objword.Quit
set objword = nothing

Я спробував кілька різних речей, які я знайшов через Google, але нічого не знайшов.

Відповіді:


1

UPDATE: виявляється, що константи, такі як wdAlignParagraphCenter, насправді не можуть бути визначені, тому перевірте це у вашому коді.

Найпростіший спосіб отримати приклад того, як зробити форматування в Word (або Excel) - це фактично почати записування макросу, робити те, що ви хочете, а потім зупинити запис і подивитися на вміст макросу.

У вашому прикладі коду я не бачу жодних ознак того, що ви намагаєтеся сконцентрувати текст. Спробуйте щось подібне selection.ParagraphFormat.Alignment = wdAlignParagraphCenterХоча це і вилучено з документації, насправді не намагається.

Після трохи більше експериментів, значення wdAlignParagraphCenter має бути 1, але з vbs це не так. Копання в документації VBScript, щоб з'ясувати, де саме це визначено, і т.д.

Крім того, будьте готові прочитати документацію - довідка Visual Basic, доступна з редактора коду Word, має інформацію, яка, ймовірно, буде корисною для вас.

Майте на увазі, що (принаймні в моєму багаторічному досвіді) можуть бути речі, які ви можете зробити в Word, які не мають правильно функціонуючого коду еквівалента, хоча, можливо, вони поліпшили речі з часів WordBasic.


Запис макросу дає код, який ви вказали тут, але це не працює. Думаю, я повинен був перерахувати різні речі, які я вже намагався.
Tester101

Ви поставили це до або після того, як ви вставили текст? Я вважаю, що те, що ви робите в наведеному вами зразку, є еквівалентом відкриття документа, зміни шрифту, а потім введення тексту. Якщо ви змінюєте центрування перед вставленням тексту, це може змінити ситуацію - після вставки тексту буде змінено налаштування для наступного абзацу.
fencepost

Що я був би задоволений, принаймні тоді я побачив би результат. Я спробував перемістити його в коді, але нічого не було зосереджено.
Tester101

Цією дискусією, включаючи інформацію про ті константи, які затримуються, може бути цікаво: excelforum.com/excel-programming/…
fencepost

2 коментарі видалено / консолідовано: Проблема в тому wdAlignParagraphCenter насправді не визначається за межами Word, тому я підозрюю, що він або кидає (ігнорується) помилку, або розглядається як 0, що, ймовірно, є законним значенням. Я знайшов один приклад, який явно визначив це значення для використання 1 і спробував підкинути це значення до команди; що зробив трюк.
fencepost

0
Set objWord = CreateObject("word.application")
Set objDoc = objWord.Documents.Add
Set objSelection = objWord.Selection
objSelection.Font.Name = "arial"
objSelection.Font.Size = "20"
objSelection.Font.Bold = True
objSelection.Paragraphs.Alignment = wdAlignParagraphCenter
objSelection.typetext "This is the title that should be centered"
objSelection.typeparagraph
objDoc.saveas ("testdoc.doc")
objWord.Quit
Set objWord = Nothing

Це не спрацювало для мене
Tester101

що ти отримав? Я пробував його з рештою вашого коду та мав красивий centered заголовок.
Beaner

Я змінив код вище, щоб включити цей рядок коду, але мій заголовок все ще залишається виправданим.
Tester101

Я вважаю, що різниця тут, ймовірно, в тому, де ви запускаєте код. Якщо ви працюєте в Word, константа має правильне значення; якщо ви використовуєте його з .vbs, це не так.
fencepost

Якщо ідея fencepost про те, що не визначено wdAlignParagraphCenter, ви можете додати її. (wdAlignParagraphCenter = 1)
Beaner

0
%% Start by creating a Word Document
    Word_COM = actxserver('Word.Application');
    set(Word_COM,'visible',1);
    RAM_Report = invoke(Word_COM.documents,'add');
    invoke(RAM_Report.paragraphs,'add');
    ReportDoc = Word_COM.Selection;

%% ReprtDoc Created   
    ReportDoc.Paragraphs.Alignment = 1;
    MyTextWithLineFeed = sprintf('%s\n','Hello World');
    ReportDoc.TypeText( MyTextWithLineFeed );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.