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)
下一篇:

Related Posts:

  • BCB OLE操作EXCEL(1) BCB 操作 EXCEL、WORD ( OLE的應用 ) 之前有講工作關係需要彙整報告,報告不外乎 WORD、EXCEL、PDF檔 程式要操作 WORD、EXCEL 可以靠微軟的 COM(Component Object Model)或 .NET Framework. 照理說應該要用 .NET Framework ( 比較潮?? ) 但是公司前輩使用的是 COM 新人啥都不懂乖乖跟著學就對了,其實也不知道兩者實際差異 因為從來沒試過另外一種… Read More
  • BCB OLE操作EXCEL(3)在用 OLE 操作 Excel 時 有可能會遇到剪貼簿裡的資料過大 導致關閉 Excel 時跳出視窗警告 "是否放棄剪貼簿裡的資料" 要避開的話通常會用關閉 DisplayAlert 的方法來避免 但我常常失敗,原因不明。 所以給失敗的朋友另一個辦法 在 Excel 關閉前複製一格 避免剪貼簿裡資料過多跳出視窗 void __fastcall Excel::Close_2(){ Exc.Range = Exc.WorkSheet.… Read More
  • BCB OLE操作EXCEL(2) BCB 操作 EXCEL、WORD ( OLE的應用 ) 有時候再操作 EXCEL 和 WORD 的時候,有可能會要應用到 MultiProcess 的概念 但真正需要的地方很少,我自己是用偷懶的方式來避開, 因為互相搶奪導致資料錯誤出現的機率微乎其微。 下面介紹一些我常碰到的錯誤 bool __fastcall JunYe_Word::getDataTable(int index){ Variant Range; bool… Read More

0 意見:

張貼留言

Popular Posts