讀excel內的資料很慢? |
尚未結案
|
blink182
一般會員 發表:4 回覆:2 積分:1 註冊:2002-04-22 發送簡訊給我 |
各位先進大家好
搜尋站內有關讀取excel資訊後,小弟改寫範例內容,讀值正確,但讀取速度非常慢請各位指教。
以下程式碼存成cpp,include進來後
則利用ReturnExcelCell(char *aa,int page,int row,int col,double &CellValue)即可使用
其中 *aa為excel檔路徑、page為第幾個sheet、CellValue為該sheet內第row、col回傳值。
1.sheet從1開始
2.row、col從0開始
3.程式碼如底下
4.存成cpp之後將此cpp要inclde進來程式內 即可使用
5.若無法使用確認view->project manager底下有add進來 第4.所存的cpp
6.成功後利用ReturnExcelCell指令 即可使用
7.作業環境為winxp,officexp 以下為程式碼
#include "ComObj.hpp" #include "Excel_2K_SRVR.h" #define COL_CYCLE 26 const char szColCycle[COL_CYCLE]= { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M' , 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; AnsiString ExcelCellName(int iCol, int iRow) { AnsiString szCol; AnsiString szRow; int m=iCol/COL_CYCLE-1; int n=iCol%COL_CYCLE; szCol=(m<0)? (AnsiString)szColCycle[n]: (AnsiString)szColCycle[m] (AnsiString)szColCycle[n]; szRow=IntToStr(iRow 1); return(szCol szRow); } void ReturnExcelCell(char *aa,int page,int row,int col,double &CellValue) { // Read cells from a *.xls file Variant ExcelApp, ExcelBooks, ExcelBook, ExcelSheets, ExcelSheet, UsedRange; Variant ExcelRange, ExcelColumn, ColumnCount, ExcelRow, RowCount; try { ExcelApp=Variant::CreateObject("Excel.Application"); } catch(Exception &e) { //ShowMessage(e.Message); } if(ExcelApp.IsEmpty()) { return; } //ExcelApp.OlePropertySet("Visible", true); ExcelBooks=ExcelApp.OlePropertyGet("Workbooks"); try { AnsiString szXlsFile1=aa; ExcelBook=ExcelBooks.OleFunction("Open", StringToOleStr(szXlsFile1)); } catch(Exception &e) { //ShowMessage(e.Message); } if(ExcelBook.IsEmpty()) { return; } ExcelSheets=ExcelBook.OlePropertyGet("Worksheets"); ExcelSheet=ExcelSheets.OlePropertyGet("Item", page); UsedRange=ExcelSheet.OlePropertyGet("UsedRange"); ExcelColumn=UsedRange.OlePropertyGet("Columns"); ColumnCount=ExcelColumn.OlePropertyGet("Count"); //StringGrid1->ColCount=ColumnCount; //StringGrid1->RowCount=RowCount; ExcelRange=ExcelSheet.OlePropertyGet("Range", StringToOleStr(ExcelCellName(col, row))); CellValue=ExcelRange.OlePropertyGet("Value"); //ShowMessage(CellValue); Application->ProcessMessages(); ExcelBook.OleFunction("Close"); ExcelApp.OleFunction("Quit"); }發表人 - blink182 於 2005/07/01 16:58:55 發表人 - blink182 於 2005/07/01 17:03:01 |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |