用BCB Read Word表格 |
缺席
|
sb055665
一般會員 發表:24 回覆:25 積分:14 註冊:2006-07-12 發送簡訊給我 |
|
sb055665
一般會員 發表:24 回覆:25 積分:14 註冊:2006-07-12 發送簡訊給我 |
附上一段code,我的Office是2003的
Variant WordApp, WordDocs, WordDoc, WordSelection, WordChange,WordTables,WordTable; if(OpenDialog1->Execute()) { //init WordApp=Variant::CreateObject("Word.Application"); WordApp.OlePropertySet("Visible", true); WordDocs=WordApp.OlePropertyGet("Documents"); //open file WordDoc=WordDocs.OleFunction("Open", OpenDialog1->FileName.c_str() ); //get page int j; j=WordDoc.OleFunction("ComputeStatistics",2); Label2->Caption="文件" WordDoc.OlePropertyGet("Name") "頁數是" IntToStr(j); //Get Table WordTables=WordApp.OlePropertyGet("Tables"); //死在這裡 //Variant wordTables = WordApp.OlePropertyGet("Tables"); //WordTable = WordTables.OleFunction("Item",1).OleFunction("Cell",1); //Variant wordCell = wordTable1.OleFunction("Cell",(Variant) 2, (Variant) 3 ); //Variant wordRange = wordCell.OlePropertyGet("Range"); //wordRange.OlePropertySet("Text", (Variant) "We are at 2/3"); WordDoc.OleFunction("Close"); } |
sb055665
一般會員 發表:24 回覆:25 積分:14 註冊:2006-07-12 發送簡訊給我 |
已找到相關讀word的方法了,在此附上code給想了解的人一個方向,不過我遇到了讀資料量大的word時會當掉到,可否請高手告知要如何才能讓它不要當掉
AnsiString text,text1; if( openDialog->Execute()) { // used for the file name OleVariant fileName; fileName = openDialog->FileName; AnsiString file = openDialog->FileName; Variant my_word; Variant my_docs; my_word = Variant::CreateObject( "word.application" ); my_word.OlePropertySet( "Visible", (Variant) true ); my_docs = my_word.OlePropertyGet( "documents" ); Variant wordActiveDocument = my_docs.OleFunction( "open", fileName ); //select all Variant WordDocs; Variant WordSelection; Variant WordChange; Variant WordReplace; TVariant FindText,OleFalse, OleTrue, Replace, ReplaceText, Wrap; wordActiveDocument=my_word.OlePropertyGet("ActiveDocument"); wordActiveDocument.OleProcedure("Select"); WordSelection=my_word.OlePropertyGet("Selection"); //set font size WordChange=WordSelection.OlePropertyGet("Font"); WordChange.OlePropertySet("Size",8); Variant wordTables = wordActiveDocument.OlePropertyGet( "Tables" ); FILE *fp; fp=fopen("OutPutText.txt","w "); //等待時間,根據資料大小而定 int waitTime; waitTime=ComboBox1->Text.ToInt(); waitTime=waitTime*60*1000; Sleep(waitTime); long Table_count = wordTables.OlePropertyGet( "count"); int tableCount, rowsCount, columnsCount; try { for( tableCount=1; tableCount<=Table_count; tableCount ) { Variant wordTable1 = wordTables.OleFunction( "Item", (Variant) tableCount );//item Variant tableRows = wordTable1.OlePropertyGet( "Rows" ); //rows Variant tableCols = wordTable1.OlePropertyGet( "Columns" ); //columns long row_count, col_count; row_count = tableRows.OlePropertyGet( "count" ); //計算row count col_count = tableCols.OlePropertyGet( "count" ); //計算colum count for( rowsCount=1; rowsCount<=row_count; rowsCount ) { Variant tableRow = tableRows.OleFunction( "Item", (Variant) rowsCount ); tableRow.OleProcedure( "Select" ); Variant rowSelection = my_word.OlePropertyGet( "Selection"); Variant rowColumns = rowSelection.OlePropertyGet( "Columns" ); Variant selectionRows = rowSelection.OlePropertyGet( "Rows" ); long rowColumn = rowColumns.OlePropertyGet( "count" ); //計算選取幾個欄位 for( columnsCount=1; columnsCount<=rowColumn; columnsCount ) { Variant rowCells = tableRow.OlePropertyGet( "cells" ); Variant wordCell = wordTable1.OleFunction( "Cell", (Variant) rowsCount, (Variant) columnsCount ); Variant cellRange = wordCell.OlePropertyGet( "Range" ); Variant rangeWords = cellRange.OlePropertyGet( "Words" ); long words_count = rangeWords.OlePropertyGet( "count" ); for( int Word=1; Word<=words_count; Word ) { text=(AnsiString)(rangeWords.OleFunction("Item",(Variant)Word)); rangeWords.OleFunction("Item",(Variant)Word).Clear() ; int pos=text.AnsiPos("\r\a"); if(pos!=0) text.Delete(pos,4); text1 =text; } // Output The Content to the datafile fputs(text1.c_str(),fp); fputs("\t\t",fp); text1=""; text=""; } fputs("\n",fp); Sleep(200); } } fclose(fp); my_word.OleFunction( "Quit" ); } catch( Exception &e ) { ShowMessage( e.Message "\nType: " __ThrowExceptionName() "\nFile: " __ThrowFileName() "\nLine: " AnsiString(__ThrowLineNumber()) ); } } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |