l'automazione OLE - tabels WORD (Delphi)
-
16-09-2019 - |
Domanda
Sto cercando di fare tavoli all'interno tabelle in Word. naturalmente, in programma finall sarà dinamical, che non è in questo esempio.
Ecco il mio codice di esempio.
var
aTable, bTable, cTable : OLEVariant;
begin
m_WordApplication := CreateOleObject('Word.Application') ;
m_WordDocument := m_WordApplication.Documents.Add;
aTable := m_WordDocument.Tables.Add(m_WordApplication.Selection.Range, 2, 1);
aTable.Borders.Item(wdBorderLeft).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderRight).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderTop).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderBottom).LineStyle:=wdLineStyleSingle;
bTable := m_WordDocument.Tables.Add(aTable.Cell(1, 1).Range, 2, 1);
bTable.Borders.Item(wdBorderLeft).LineStyle:=wdLineStyleSingle;
bTable.Borders.Item(wdBorderRight).LineStyle:=wdLineStyleSingle;
bTable.Borders.Item(wdBorderTop).LineStyle:=wdLineStyleSingle;
bTable.Borders.Item(wdBorderBottom).LineStyle:=wdLineStyleSingle;
cTable := m_WordDocument.Tables.Add(aTable.Cell(2, 1).Range, 3, 1);
cTable.Borders.Item(wdBorderLeft).LineStyle:=wdLineStyleSingle;
cTable.Borders.Item(wdBorderRight).LineStyle:=wdLineStyleSingle;
cTable.Borders.Item(wdBorderTop).LineStyle:=wdLineStyleSingle;
cTable.Borders.Item(wdBorderBottom).LineStyle:=wdLineStyleSingle;
m_WordDocument.SaveAs('C:/test.doc', False) ;
m_WordApplication.Quit(False);
Innanzitutto metto nuova tabella (2 righe, 1 colonna) sulla posizione del cursore, e poi provo a mettere seconda tabella nella cella (1,1) e terzo nella cella (2,1) della prima tabella. seconda tabella ha anche 2 righe e 1 colonna, ma terza tabella ha 3 righe e 1 colonna. ma invece di quello che voglio io ottenere secondo e il terzo tavolo di Pentecoste solo una riga, a prescindere se i putt qualcosa in burbero cellulare o not.i sempre vedere solo l'ultima stringa ho messo in tale tabella.
ancor più, se metto 1 riga e 2 tavolo colonna all'interno prima tabella, che tutto è normale.
mi potete aiutare.
grazie, Rok
Soluzione
Quando si hanno problemi nella creazione tali tabelle nel codice, effettuare le seguenti operazioni:
- Aprire Word
- registrare una nuova macro
- Durante la registrazione, costruire la tabella che si desidera, quindi interrompere la registrazione.
- Vedi il tuo codice di macro in Visual Basic Editor e cercare di tradurre che per il codice OLE-automation (che non è così difficile, è quasi lo stesso)
Altri suggerimenti
aTable.Borders.Item(wdBorderVertical).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderHorizontal).LineStyle:=wdLineStyleSingle;
Si dovrà fare lo stesso per bTable & CTable.
Quando si aggiunge più di 1 riga / colonna, avrà bisogno di frontiera per separarla (cioè per separare 1 fila da un altro o separati 1 colonna da un altro).
Spero che questo aiuti.