華表Cell檔案匯入匯出
在福州出差ing……使用華表Cell和Sybase、Cognos做專案……這段經歷被前輩稱為地獄歷險記,用的sybase是12.5,Cognos是8.1,華表Cell版本,等等,我查一下,哦,是5.2.6.0809……
翻看華表Cell元件的示例程式,官方的例子十分可怕,在瀏覽器里載入ActiveX控制元件(這並不可怕,可怕的是),接著呼叫華表API中的方法SetCellString()來逐個單元格寫入資料到ActiveX控制元件中——這是從Cell檔案載入資料到介面的控制元件。
來說說功能需求,要從Cell檔案中讀取報表資料,匯入到資料庫中,看似簡單唯美,但依據官方的例子實難完成。
按官方的例子,首先建立Cell元件的ActiveX控制元件在頁面上,假定為
<object id="DCellWeb1" style="left: 0px; width: 100%; top: 0px; height: 900px;"
codebase="CellWeb5.cab#version=5,3,8,0429" classid="clsid:3F166327-8030-4881-8BD2-EA25350E574A" >
<param name="_Version" value="65536" />
<param name="_ExtentX" value="10266" />
<param name="_ExtentY" value="7011" />
<param name="_StockProps" value="0" />
</object>
使用Cell元件開啟本地的某個Cell檔案,這樣Cell檔案中的資料就載入到了Cell控制元件中
document.getElementById("DCellWeb1").openfile("D:\\temp\\test.cll","");
獲取Cell控制元件中的資料內容,程式碼如下:
var dcell = document.getElementById("DCellWeb1"); var sendTxt = ""; // Sheet頁數 var sheetCount = dcell.GetTotalSheets(); for(var sheet=0; sheet<sheetCount; i++){ dcell.SetCurSheet(sheet); // 獲取當前頁總列數、行數 var colCount = dcell.GetCols(sheet); var rowCount = dcell.GetRows(sheet); // 獲取當前頁資料區域的起始列數、行數 var leftCol = dcell.GetLeftCol(); var topRow = dcell.GetTopRow(); // 按行、列,獲取所有單元格的資料 for (row=topRow; row<rowCount; row++) { for (col=leftCol; col<colCount; col++) { var sValue = dcell.GetCellString(col, row, sheet); if(sValue=="") sValue=" "; sendTxt+=sValue; if(col < colCount - 1) sendTxt+=","; } if(row < rowCount - 1) sendTxt+="!"; } }
按上面的方法,逐個單元格遍歷資料,而後組裝起來,使用Ajax等方式向後臺傳輸即可。但是這樣做其實不對,因為日常辦公面對的統計表格通常都有200多行,100多列,Sheet頁都有20個左右,粗略計算一下,GetCellString方法的呼叫次數多達40多萬次,在IE下跑了一下,大約組裝過程需要40秒左右。
放棄這條思路,往如何獲取整塊資料的思路上去搜尋API,由於官方論壇在維護,API文件組織上的問題,查了很久才找到如下2個方法:
SaveToXML
ReadFromXML
用這兩個方法可以整體獲取或寫入Cell控制元件中的資料內容。示例如下:
// 以xml形式,獲取dcell中的內容 var xmlcontent = dcell.SaveToXML(''); // xmlcontent為xml形式組織的資料內容,將這些內容寫入到dcell元件中 dcell.ReadFromXML(xmlcontent);
這樣就完整的獲取了Cell元件中的資料內容,呼叫效率自然是相當的高,大約同上面的報表資料量,只需要0.2秒左右。剩下來的工作就是將這些內容傳遞到後臺,並使用Dom4j或XStream等工具包對XML資料內容進行解析處理。
相關文章
- MySQL匯入匯出檔案檔案MySql
- (十一)Electron 匯入匯出檔案
- mysql 匯入匯出 sql檔案MySql
- MySQL匯入匯出平面檔案MySql
- EasyExcel完成excel檔案的匯入匯出Excel
- Navicat如何匯入和匯出sql檔案SQL
- oracle排除表匯入匯出Oracle
- 如何使用JavaScript匯入和匯出Excel檔案JavaScriptExcel
- ubuntu 下mysql匯入和匯出.sql檔案UbuntuMySql
- MySQL 匯出匯入二進位制檔案MySql
- [Docker核心之容器、資料庫檔案的匯入匯出、容器映象的匯入匯出]Docker資料庫
- mysqldump匯入匯出表資料MySql
- 資料泵匯出匯入表
- 【匯出匯入】匯出匯入 大物件物件
- MySQL表資料匯入與匯出MySql
- Progress資料表的匯入匯出
- sqlserver匯入匯出文字檔案SQLServer
- 一個ORACLE匯入和匯出XML檔案的例子OracleXML
- 使用xml檔案,做資料的匯入,匯出 (轉)XML
- SQLSERVER匯出TXT文字檔案,ORACLE SQL LOADER匯入TXT文字檔案SQLServerOracle
- 匯入sql檔案出現亂碼SQL
- svn匯入檔案
- Java之POI操作Excel表-匯入匯出JavaExcel
- ClickHouse 資料表匯出和匯入(qbit)
- DB2表的匯入與匯出DB2
- 匯入匯出 Oracle 分割槽表資料Oracle
- Oracle使用資料泵匯出匯入表Oracle
- 表統計資訊匯出匯入指令碼指令碼
- 【匯入匯出】sqlldr 匯入案例SQL
- php讀取excel檔案資料的匯入和匯出PHPExcel
- 哪位有jsp匯入匯出xml檔案的程式碼JSXML
- 【匯出匯入】% 在匯入匯出中的應用。
- 報表如何批次匯出成 excel 檔案Excel
- DB2資料庫匯出表結構與匯入、匯出表資料DB2資料庫
- Activity 流程模型匯入匯出-activity流程模型匯入匯出模型
- 從SQL Server匯出txt檔案匯入Oralce遇到毫秒問題SQLServer
- [Mysql]——備份、還原、表的匯入匯出MySql
- Mysql匯入&匯出MySql