S
Schicker
Hallo
ich möchte eine Zeile aus einer Excel-Tabelle auslesen lassen. Das klappt ja noch ganz gut. Wenn ich allerdings der Wert einer Zelle in einer MessageBox ausgeben lassen will dann klappt das nicht. Habe schon versucht eine Typumwandlung mit COleVariant::ChangeType(VT_BSTR) allerdings bekomme ich dann zur Laufzeit eine Exception mit Typkonflikt. Was ich auch schon versucht habe ist mir den jeweiligen Typ den "vData" gerade verwendet anzeigen zu lassen (siehe auskommentierte Switch-Anweisung). Wenn ich vData.vt abfragen lasse, dann kommen etliche Datentypen obwohl die Zelle, die gerade gelesen wird leer ist.
Kann mir wer helfen
mfg
Chris
ich möchte eine Zeile aus einer Excel-Tabelle auslesen lassen. Das klappt ja noch ganz gut. Wenn ich allerdings der Wert einer Zelle in einer MessageBox ausgeben lassen will dann klappt das nicht. Habe schon versucht eine Typumwandlung mit COleVariant::ChangeType(VT_BSTR) allerdings bekomme ich dann zur Laufzeit eine Exception mit Typkonflikt. Was ich auch schon versucht habe ist mir den jeweiligen Typ den "vData" gerade verwendet anzeigen zu lassen (siehe auskommentierte Switch-Anweisung). Wenn ich vData.vt abfragen lasse, dann kommen etliche Datentypen obwohl die Zelle, die gerade gelesen wird leer ist.
Code:
void CAutoProjektDlg::OnRun()
{
// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
_Application app; // app is the Excel _Application object
Workbooks books;
_Workbook book;
_Worksheet sheet;
Worksheets sheets;
Range range;
CFile file;
file.Open("temp.dat",CFile::modeCreate | CFile::modeWrite);
CArchive archive(&file, CArchive::store);
// Start Excel and get Application object.
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Cannot start Excel and get Application object.");
return;
}
else
{
//Make the application visible and give the user control of
//Microsoft Excel.
//app.put_Visible(TRUE);
//app.put_UserControl(TRUE);
app.SetVisible(FALSE);
app.SetUserControl(FALSE);
books=app.GetWorkbooks();
CFileDialog FileDlg(TRUE, ".xls", NULL, OFN_HIDEREADONLY, NULL, NULL);
if(FileDlg.DoModal()==IDOK)
{
CString name = FileDlg.GetPathName();
name.Replace("\\","\\\\");
book= books.Open(name ,vOpt,vOpt, vOpt, vOpt, vOpt, vOpt, vOpt ,vOpt , vOpt, vOpt, vOpt, vOpt ,vOpt, vOpt);
}
sheets = book.GetWorksheets();
sheet = sheets.GetItem(COleVariant((short)1));
sheet.Activate();
range = sheet.GetRange(COleVariant("A35"),COleVariant("AP35"));
////////////////////////////////////////////////////////////////////////////////////////////
COleSafeArray saRet;
saRet = range.GetValue2();
long iRows;
long iCols;
saRet.GetUBound(1, &iRows);
saRet.GetUBound(2, &iCols);
CString valueString = "Array Data:\r\n";
long index[2];
// Loop through the data and report the contents.
for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {
for (int colCounter = 1; colCounter <= iCols; colCounter++) {
index[0]=rowCounter;
index[1]=colCounter;
COleVariant vData;
saRet.GetElement(index, vData);
vData.ChangeType(VT_INT);
int x = rowCounter;
int y = colCounter;
TRACE( "x hat den Wert %d\n", x );
TRACE( "y hat den Wert %d\n", y );
/*
switch (vData.vt)
{
case VT_INT:
AfxMessageBox("VT_INT");
case VT_BSTR:
AfxMessageBox("VT_BSTR");
case VT_EMPTY:
AfxMessageBox("leer");
case VT_PTR:
AfxMessageBox("Zeiger");
case VT_I2:
AfxMessageBox("VT_I2");
case VT_I4:
AfxMessageBox("VT_I4");
case VT_R4:
AfxMessageBox("VT_R4");
case VT_R8:
AfxMessageBox("VT_R8");
case VT_DISPATCH:
AfxMessageBox("VT_DISPATCH");
case VT_ERROR:
AfxMessageBox("VT_ERROR");
case VT_BOOL:
AfxMessageBox("VT_BOOL");
case VT_VARIANT:
AfxMessageBox("VT_VARIANT");
case VT_DECIMAL:
AfxMessageBox("VT_DECIMAL");
case VT_I1:
AfxMessageBox("VT_I1");
case VT_UI1:
AfxMessageBox("VT_UI1");
case VT_UI2:
AfxMessageBox("VT_UI2");
case VT_UI4:
AfxMessageBox("VT_UI4");
case VT_UINT:
AfxMessageBox("VT_UINT");
case VT_VOID:
AfxMessageBox("VT_VOID");
case VT_HRESULT:
AfxMessageBox("VT_HRESULT");
case VT_SAFEARRAY:
AfxMessageBox("VT_SAFEARRAY");
case VT_CARRAY:
AfxMessageBox("VT_CARRAY");
case VT_USERDEFINED:
AfxMessageBox("VT_USERDEFINED");
case VT_LPSTR:
AfxMessageBox("VT_LPSTR");
case VT_LPWSTR:
AfxMessageBox("VT_LPWSTR");
case VT_BLOB:
AfxMessageBox("VT_BLOB");
case VT_STREAM:
AfxMessageBox("VT_STREAM");
case VT_STORED_OBJECT:
AfxMessageBox("VT_STORED_OBJECT");
case VT_BLOB_OBJECT:
AfxMessageBox("VT_BLOB_OBJECT");
case VT_CF:
AfxMessageBox("VT_CF");
case VT_CLSID:
AfxMessageBox("VT_CLSID");
case VT_VECTOR:
AfxMessageBox("VT_VECTOR");
case VT_ARRAY:
AfxMessageBox("VT_ARRAY");
case VT_BYREF:
AfxMessageBox("VT_BYREF");
case VT_RESERVED:
AfxMessageBox("VT_RESERVED");
}
*/
valueString += "\t";
}
valueString += "\r\n";
}
AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);
app.Quit();
}
mfg
Chris