C
Hallo,
ich bin momentan dabei eine Word Vorlage mit meinem MFC Programm zu öffnen und als Serienbrief Datenquelle eine Excel Tabelle an zu geben. Das ganze funst jetzt auch schon mal ganz gut. Bin dabei aber noch in der Testfase und es ist noch etwas unsauber programmiert, habe aber jetzt schon ein sehr großes Problem.
Und zwar werden über die ODBC Datenquelle und dem SQL String nur die ersten 255 Zeichen zu MS Word übertragen.
Hab im Internet schon gelesen das es über DDE funzen soll, oder über einen SQL1 String.
In der Online MSDN habe ich schon mal folgendes zu der OpenDataSource Methode gefunden:
SQLStatement
Optional Object. Defines query options for retrieving data. (See Remarks below.)
SQLStatement1
Optional Object. If the query string is longer than 255 characters,
SQLStatement specifies the first portion of the string, and SQLStatement1 specifies the second portion. (See Remarks below.)
http://msdn.microsoft.com/de-de/library/microsoft.office.interop.word.mailmerge.opendatasource(VS.80).aspx
Mein Problem ist hier nur, ich verstehe einfach nicht wie ich das SQLStatement1 angeben muss ? Habe es zu test zwecken so angegeben wie das erste nur das funst nicht, ich bekomme immer die Fehlermeldung das er die Datenquelle nicht finden kann.
Hier mal mein gesamter Code:
CString vSQLStatement;
CString vConnection;
COleVariant Type((short)8),vTrue((short)TRUE),vFalse((short)FALSE);
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),vtTrue((short)TRUE),vtFalse((short)FALSE);
vSQLStatement = "SELECT * FROM `Tabelle1$`";
vConnection = "DSN=Temp;DBQ=C:\Temp.xls;FIL=MS Excel";
if (!oWord.CreateDispatch("Word.Application"))
{
AfxMessageBox("Word konnte nicht geöffnet werden!");
}
else
{
Help = oWord.GetBuild();
Version = Help.Mid(0,2);
oWord.SetVisible(TRUE);
oWord.SetDisplayAlerts(FALSE);
oDocs = oWord.GetDocuments();
//oDoc = oDocs.Add(vtOptional,vtOptional,vtOptional,vtOptional);
oDoc = oDocs.Open(COleVariant(Datei),vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional);
oMailMerge = oDoc.GetMailMerge();
oMailMerge.OpenDataSource(NULL,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,COleVariant(vConnection,VT_BSTR),COleVariant(vSQLStatement,VT_BSTR),COleVariant(vSQLStatement,VT_BSTR));
oMailMergeFields = oMailMerge.GetFields();
oMailMerge.SetDestination(0); // 0 = wdSendToNewDocument
oMailMerge.Execute(vtFalse);
oDoc.Close(vtFalse,vtOptional,vtOptional);
oWord.SetVisible(TRUE);
oWord.ReleaseDispatch();
}
Mein Problem ist einfach das in der Spalte E ab und zu eine Zelle mit mehr als 255 Zeichen enthalten ist.
Kann mir einer bei dem Problem helfen ?
Hat jemand eine Idee?
Hat jemand ein beispiel wie es über DDE funst ?
Danke Coolsero