2018年5月1日 星期二

BCB OLE操作EXCEL(2)

BCB 操作 EXCEL、WORD ( OLE的應用 )


有時候再操作 EXCEL 和 WORD 的時候,有可能會要應用到 MultiProcess 的概念
但真正需要的地方很少,我自己是用偷懶的方式來避開,
因為互相搶奪導致資料錯誤出現的機率微乎其微。
下面介紹一些我常碰到的錯誤
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 意見:

張貼留言

Popular Posts