Word- New Tabelle

C

Cindy M -WordMVP-

Hi Timo,
how can i get in Word (COM) a new tabell line
More information, please:

- Version of Word

- Environment in which you're automating it

- Is it correct to assume you already have a table in the
document, and you want to insert an additional row (Zeile)?
At the end, or somewhere else? How is your code identifying
the table to which you want to add a row (post some
code, please)?

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update
Jun 8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any
follow question or reply in the newsgroup and not by e-mail
:)
 
T

Timo Lang

hi Cindy

firstly thanks for your answere
(kannst du auf deutsch schreiben ,bitte :) )

1) Version Office 2000
2) VC++6, MFC
3)yes i have alreadya table in the document
and now i will copy this line and insert drunter

i have open the word document usw, from this site
http://www.a-m-i.de/tips/office/officeautomation.php

ich hab kein blassen schimmer :)

thank you
 
C

Cindy M -WordMVP-

Hi Timo,
1) Version Office 2000
2) VC++6, MFC
3)yes i have alreadya table in the document
and now i will copy this line and insert drunter

i have open the word document usw, from this site
http://www.a-m-i.de/tips/office/officeautomation.php
Also, mit C++ bin ich überhaupt nicht vertraut; ein (sehr!)
wenig C# kann ich. Aber meistens arbeite ich mit VBA.
Hoffentlich kannst Du die Befehle soweit übersetzen.

Die Webseite bringt mich eigentlich nicht näher; ich habe
keine Zeit, alle Links durchzugehen, um zu sehen, was Du
allenfalls schon machst. Kannst Du mir sagen, wie der Code
weiss, mit welcher Tabelle er arbeiten soll? Oder wie Du
Dir das vorstellst? Wäre es einfach die einzige Tabelle im
Dokument? Oder eine gewisse Tabelle (wie findet man sie,
dann)? Oder die Tabelle, worin sich die Einfügemarke
befindet?

Eine neue Zeile wird mit der Rows.Add Methode hinzugefügt.
Da es sich um C++ handelt, musst Du vermutlich auch das
Parameter, das besagt, vor welcher Zeile die neue eingefügt
werden soll, angeben. Wenn die neue Zeile am Ende der
Tabelle hinzugefügt werden soll, müsste der Wert
"objectMissing" sein.

Aber noch eine Frage: was machst Du mit der Tabelle? Musst
Du eine Menge Daten eingeben? Oder?

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update
Jun 8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any
follow question or reply in the newsgroup and not by e-mail
:)
 
T

Timo Lang

Hi

achso du kennst dich "nur" mit VB aus
mmh

Bis jetzt hab ich noch überhaupt nichts, nur den Code von
der genannten Seite (wie man eine worddatei
öffnet,speichert,druckt, bookmark setzt)

Also ich eine Tabelle,(mit Plazuhaltern z.B $ZEIT$ und
dieser wird dann durch "Suchen und Ersetzen" in der Word
Vorlage ersetzt).
Die Daten hol ich aus der DB raus. Nun ist es aber so
dass ich das in einer Schleife durchlaufen lasse. und wenn
die Zeile voll ist soll immer eine neue Tabellenzeile
drunter eingefügt werden.

Tabelle kann man ja finden durch ein Bookmark das man an
vor der Tabelle setzt oder nicht?
Dann kopiert man dies ganze Zeile (also dass die
Platzhalter auch dabei sind)

Ja , in der Tabelle sind die Platzhalter drin, die mit
Daten gefüllt werden

danke
 
C

Cindy M -WordMVP-

Hi Timo,
Bis jetzt hab ich noch überhaupt nichts, nur den Code von
der genannten Seite (wie man eine worddatei
öffnet,speichert,druckt, bookmark setzt)

Also ich eine Tabelle,(mit Plazuhaltern z.B $ZEIT$ und
dieser wird dann durch "Suchen und Ersetzen" in der Word
Vorlage ersetzt).
Die Daten hol ich aus der DB raus. Nun ist es aber so
dass ich das in einer Schleife durchlaufen lasse. und wenn
die Zeile voll ist soll immer eine neue Tabellenzeile
drunter eingefügt werden.
Habe ich mir gedacht :) Obwohl diese Vorgehensweise logisch
ist, ist sie in Word nicht sehr effizient. Ich bin gerade
dabei, ein Artikel für MSDN zu schreiben, der diese
Problematik beschreibt, mit Beispielcode usw. Dauert aber
noch einige Tage, und dann muss er durch die
MS-Editorenmühlen...

Mann muss ungefähr so vorgehen:
- die Daten in ein zeichengetrenntes STRING sammeln. Das
Feldtrennzeichen kann irgendeines sein; das
Datensatztrennzeichen muss Chr$(13) (= carriage return; ich
glaube, die C-Sprachen haben dafür einen besonderen Namen, er
fällt mir im Moment aber nicht ein)

- die Stelle, wo die Tabelle kommt, suchen. (Am besten
arbeitet man mit einem RANGE, wie
Word.Range rng = Bookmarks(index).Range

- das String dem Range übergeben:
rng.Text = meineDaten

- Range in eine Tabelle umwandeln:
rng.ConvertToTable(diverse Parameter)
Tabelle kann man ja finden durch ein Bookmark das man an
vor der Tabelle setzt oder nicht?
Dann kopiert man dies ganze Zeile (also dass die
Platzhalter auch dabei sind)

Ja , in der Tabelle sind die Platzhalter drin, die mit
Daten gefüllt werden

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any follow
question or reply in the newsgroup and not by e-mail :)
 
T

Timo Lang

hi cindy

aber der Beitrag den du schreibst ist wieder nur in VB
oder ?;-)

Dann muss ich halt noch warten oder googel bis ich was
passendes finde.

In VB wurde mal das so gemacht:
Word.Selection.SelectRow
Word.Selection.Copy
...
Word.Selection.Paste
Word.Selection.GoTo What:=wdGoToLine,
Which:=wdGoToPrevious, Count:=1, Name:=""


aber ich brauch das in C++, wie du ja schon weißt :)

Ich muss wissen, wie ich eine Zeile kopieren kann und
drunter einfügen kann. So ein Mist, warum findet man
nichts im Internet :-(
Nichtmal in der MSDN steht dazu was.
Weißt du vielleicht noch eine gute Seite

besten dank
grüße timo
 
C

Cindy M -WordMVP-

Hi Timo,
aber der Beitrag den du schreibst ist wieder nur in VB
oder ?;-)
VBA, VB6 und C#, mit Hinweise für VB.NET (der sich von der
anderen VB-Varianten sowieso nicht gross abweicht).
Ich muss wissen, wie ich eine Zeile kopieren kann und
drunter einfügen kann. So ein Mist, warum findet man
nichts im Internet :-(
Nichtmal in der MSDN steht dazu was.
Vermutlich, weil diese eine bedenklich schlechte Methode
wäre. Es ist immer eine schlechte Idee, die Zwischenablage
einzusetzen; u.U. könnte dies den Benutzer schön sauer
machen. Nur, weil irgendjemand nur zufällig so etwas
gemacht hat, und Du den Code in "Deiner" Sprache findest,
heisst das nicht, Du solltest das Gleiche tun.

Sind diese "Platzhalter" in den Tabellezellen
unverzichtbar? Warum? Meistens gibts einen anderen Weg. Und
Du musst halt bereit sein, mit dem Automatisierungscode ein
wenig zu experimentieren. Word ist heikel, und verzeiht
Fehler nur selten. Du findest im Internet bestimmt genügend
Codebeispiele, um zu sehen, wie man in C++ mit Word
Methoden und Eigenschaften umzugehen hat. Du wärst der
erste C++-Entwickler, dem ich begegnet bin, der VB-Syntax
in C++ nicht "übersetzen" konnte...

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update
Jun 8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any
follow question or reply in the newsgroup and not by e-mail
:)
 
T

Timo Lang

hi
Sind diese "Platzhalter" in den Tabellezellen
unverzichtbar? Warum? Meistens gibts einen anderen Weg.
ja die sind unverzichtbar :), sobald eine Zeile gefüllt
wird , soll eine neue Zeile eingefügt werden mit den
gleichen Platzhalter

Fehler nur selten. Du findest im Internet bestimmt genügend
Codebeispiele, um zu sehen, wie man in C++ mit Word
Methoden und Eigenschaften umzugehen hat.
ich hjab leider nichts gefunden :-(, und dass mehrere Tage,
Was soll man dazu noch sagen ;-)


Du wärst der
erste C++-Entwickler, dem ich begegnet bin, der VB-Syntax
in C++ nicht "übersetzen" konnte...
hey ich bin absoluter Anfänger, hab grad mal 5 Monate C in
der Uni gelernt.... :)

cu
 
C

Cindy M -WordMVP-

Hi Timo,
ja die sind unverzichtbar :), sobald eine Zeile gefüllt
wird , soll eine neue Zeile eingefügt werden mit den
gleichen Platzhalter
Also, wenn es wirklich so gehen muss, würde ich das
ungefähr so lösen (C#-Code, ungetestet aus dem Kopf):

Word.Row rwOrig = Table.Rows.Last
Word.Row rwNew = Table.Rows.Add(ref objMissing)
for(int i = 1;i <= rwOrig.Cells.Count; i++)
{
rwNew.Range.Cells(i).Range.FormattedText =
rwOrig.Range.Cells(i).Range.FormattedText
}

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update
Jun 8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any
follow question or reply in the newsgroup and not by e-mail
:)
 
G

Guest

Hi Cindy

erstmal vielen dank für die hilfe :)

allso nun hab ich das mal übernommen (aber das ist c hash
oder wie das heißt oder) geht das auch in c++?
Welchen .h Dateien muss ich den noch includieren, nämlich
es kommen folgende Fehler:

error C2065: 'Word' : undeclared identifier
: error C2228: left of '.Row' must have class/struct/union
type
: error C2146: syntax error : missing ';' before
identifier 'rwOrig'
: error C2065: 'rwOrig' : undeclared identifier
: error C2065: 'Table' : undeclared identifier
error C2228: left of '.Rows' must have class/struct/union
type
: error C2228: left of '.Last' must have
class/struct/union type
) : error C2146: syntax error : missing ';' before
identifier 'Word'
: error C2228: left of '.Row' must have
class/struct/union type
: error C2146: syntax error : missing ';' before
identifier 'rwNew'
: error C2065: 'rwNew' : undeclared identifier
: error C2228: left of '.Rows' must have
class/struct/union type
: error C2228: left of '.Add' must have
class/struct/union type
: error C2065: 'ref' : undeclared identifier
: error C2146: syntax error : missing ')' before
identifier 'objMissing'
usw....



also mit dem code den du mir gegeben hast, wird die erste
Tabellenzeile kopiert und drunter eingefügt oder?
(in der Tabelle gibt es mehrer Spalten , aber wenn die
erste Zeile kopiert wird ist es egal, der kopiert die
Spalten mit oder?)

vielen dank

grüße timo
 
T

Timo Lang

-----Original Message-----
Hi Cindy


was mir grad eingefallen ist, also von "HAnd" geht man ja
mit der Maus vor die Tabelle und drückt Str V und dann Str
V, dann wird eine neue Zeile mit dem Inhalt drunter
eingefüt. Aber kann man das auch programmieren?

danke
grüße
 
C

Cindy M -WordMVP-

also mit dem code den du mir gegeben hast, wird die erste
Tabellenzeile kopiert und drunter eingefügt oder?
Nein. Es wird eine neue am Ende der Tabelle eingefügt, und
den Inhalt der hervorgehende Reihe, Zelle-für-Zelle,
übernommen.

Die Zwischenablage (Kopieren/Einfügen) bedient sich ein
"echter" Programmierer nur dann, wenn es wirklich keine
andere Lösung gibt. Er könnte etwas überschreiben, was der
Benutzer noch braucht; er lässt Zeug darauf, was der
Benutzer nicht will. Also die Hände davon lassen - es gibt
für dieses Anliegen andere Lösungen!

Zum Syntax kann ich nichts mehr sagen; in C++ habe ich nie
programmiert. Aber was Dir fehlt sind die Deklaration der
Objektvariablen. Ich rate, Dich an eine deutschsprechende
C++ Gruppe zu wenden, wo man Dir helfen kann, diese
Programmiersprache besser zu verstehen und beherrschen. Das
Word-Objektmodell ist nichts für Anfänger...

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any
follow question or reply in the newsgroup and not by e-mail
:)
 
T

Timo Lang

hi cindy
Nein. Es wird eine neue am Ende der Tabelle eingefügt, und
den Inhalt der hervorgehende Reihe, Zelle-für-Zelle,
übernommen.

--> ja okay, das ergebnis ist das gleiche, danke :)
Die Zwischenablage (Kopieren/Einfügen) bedient sich ein
"echter" Programmierer nur dann, wenn es wirklich keine
andere Lösung gibt. Er könnte etwas überschreiben, was der
Benutzer noch braucht; er lässt Zeug darauf, was der
Benutzer nicht will. Also die Hände davon lassen - es gibt
für dieses Anliegen andere Lösungen!

---> ja, das hab ich schon aufgegeben , so komm ich nicht
weiter


Zum Syntax kann ich nichts mehr sagen; in C++ habe ich nie
programmiert. Aber was Dir fehlt sind die Deklaration der
Objektvariablen. Ich rate, Dich an eine deutschsprechende
C++ Gruppe zu wenden, wo man Dir helfen kann, diese
Programmiersprache besser zu verstehen und beherrschen. Das
Word-Objektmodell ist nichts für Anfänger...
----> weißt du ein passende gruppe wo man das
reinschreiben könnte? alles so unübersichtlich hier ;-)

naja okay, dann vielen dank für deine hilfe und mühe
Noch eins, kann man das in VB coden und dann irgendwie in
mein Projekt mit DLL einbinden?

bis dann
grüße timo
 
C

Cindy M -WordMVP-

Hi Timo,
Noch eins, kann man das in VB coden und dann irgendwie in
mein Projekt mit DLL einbinden?
"Classic VB" (also VB6) vermutlich schon. Mit VB könnte man
ein DLL erstellen und diese ansprechen/ausführen lassen.
Allerdings übersteigt das "wie" meine Kenntnisse. Das würde
ich in einer VB-Gruppe fragen.

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any
follow question or reply in the newsgroup and not by e-mail
:)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top