BCB 操作 EXCEL、WORD ( OLE的應用 )
但真正需要的地方很少,我自己是用偷懶的方式來避開,
因為互相搶奪導致資料錯誤出現的機率微乎其微。
下面介紹一些我常碰到的錯誤
bool __fastcall JunYe_Word::getDataTable(int index){
Variant Range;
bool flag = true;
try{
Range = Wd.DataDoc.OlePropertyGet("Tables").OleFunction("Item",index).OlePropertyGet("Range");
}catch(EOleSysError *e){
BugReport(L"Ranging Fail !! This Word doesn't have No."+IntToStr(index)+" Table.");
flag = false;
}
if(flag){
Range.OlePropertyGet("Rows").OleFunction("Item",1).OleFunction("Delete");
Range.OleFunction("Copy");
}
return flag;
}
有時候要 Range 但 FAIL,有可能資料錯誤或跳錯誤訊息,且造成程式當掉的機會很大這時候就會用 Try and Catch 如上面的程式碼來避免
String __fastcall Excel::getCellValue(int row, int column){
String data;
Variant temp;
try{
temp = Exc.WorkSheet.OlePropertyGet("Cells", row, column).OlePropertyGet("Value");
if(VarType(temp) != varError){
data = temp;
}
}catch(EOleSysError *e){
BugReport(L"The Cell Can't transmit to OleStr");
}
return data;
}
這個段程式是防止吃 EXCEL CELL的值時,會導致 Can't transmit to OleStr 的狀況,
不是吃錯值,而是格子可能是#FFFFFF之類的東西,你直接用上述的data(String)去接會錯
Try and Catch 也擋不了( 我自己試擋不了 ),這時我用多了一層判斷,
用 VarType 去檢查 CELL 值是否能轉 OleStr。上一篇:
BCB OLE操作EXCEL (1)
下一篇:
0 意見:
張貼留言