1. 程式人生 > >C++讀寫EXCEL檔案方式比較

C++讀寫EXCEL檔案方式比較

因為有些朋友問程式碼的問題,將OLE讀寫的程式碼分享在這個地方,大家請自己看。 http://blog.csdn.net/fullsail/article/details/8449448

C++讀取Excel的XLS檔案的方法有很多,但是也許就是因為方法太多,大家在選擇的時候會很疑惑。

由於前兩天要做導表工具,比較了常用的方法,總結一下寫個短文,

1.OLE的方式

這個大約是最常用的方式,這個方式其實啟動了一個EXCEL的程序在背後讀寫EXCEL檔案,這個方式的最大好處是什麼事情都能做。包括設定EXCEL的格式,增加刪除Sheet,讀寫單元格,等等。功能幾乎是最全的,而且使用起來也不是特別的難。

其基本方法都是使用匯出的.h檔案進行OLE操作,但是由於OLE的介面說明文件不多,想非常完美的使用她們也不是太容易,好在例子也很多。

網上普遍認為OLE速度慢,EXCEL的OLE讀寫方式也基本一樣。但是讀取速度可以改進,如果在讀取的載入整個Sheet的Range的全部資料,而不是一個個單元格讀取,那麼速度還是相對不錯。想想原理也很簡單,整體讀取減少了OLE的互動次數。OLE的寫入方式一般只能幾個進行比較方便,所以速度可能要快很多。

我自己的親身體會是,一個EXCEL檔案,100多列的欄位,如果採用一個個單元格的讀取方式,1s大約3條左右的記錄,如果整體讀取,速度可以提高几十倍。

OLE讀寫EXCEL方式功能很強大,讀取速度還可以,但寫入速度不高,當然這個方式不可能移植的,而且你必須安裝了EXCEL。

2.Basic EXCEL 方式

這是CodeProject上的一個推薦開源工程了,

作者是基於EXCEL的檔案格式進行的處理。但是為什麼叫Basic EXCEL呢。

他不支援很多東西,公式,檔案格式,表格合併等(有人說中文支援也不好),所以可以認為他只支援最基本的EXCEL表格,

我自己的嘗試是如果這個EXCEL檔案有其他元素(公式,格式等),使用Basic EXCEL讀取會失敗。

OLE讀寫EXCEL方式功能比較弱,由於是直接根據檔案格式操作,讀寫速度都不錯,你也不需要按照EXCEL,另外這個方式是可以移植的,但是有一些成本,其程式碼比較晦澀難懂,而且沒有註釋,另外即使在Windows平臺上,告警也很多。

3.Sourceforge 上的幾個EXCEL庫。

Sourceforge 上有幾個開源的的EXCEL庫,但是完善的不多,有的是為了PHP讀寫EXCEL準備的,包括libXLS,XLSlib,SmartEXCEL等。我下載了幾個實驗了一下,在Widonws都沒有編譯成功。也罷了。

4.ODBC的方式

這個親身沒有嘗試過,但是按照原理,應該只能讀寫。

速度嗎,ODBC的速度本來就是出名的慢了。

值得一提的是Basic EXCEL的作者原來在CodeProject上有一個給予ODBC方式的封裝CSpreadSheet 。如果有興趣,大家可以去看看。其實內心還是很佩服這個作者的。

5.ADO的方式

ADO的方式聽說應該就是使用OLEDB的方式。和OLE的方式應該沒有本質區別。我看了看例子也和OLE很像

6.LibXL

LibXL 是一個收費的EXCEL的庫。

按照他的說明,他可以不依賴EXCEL讀取XLS檔案。包括設定格式等。看例子操作應該很簡單。但是是否可以移植到Linux平臺,我估計難度也不小。呵呵。

由於要收費,沒有法子測試了。

7.網上一些號稱不用OLE讀取EXCEL例子

初步看了一下,這個應該是網上探索EXCEL格式文件的例子。可以實際操作的方式不強。

 ==============================================================================================================================

 2015年1月更新一下

其實目前看來,可以使用的庫比原來多了不少。

第一。

LibXL 目前國內用的人不少。當然他其實沒有免費,只是……你在CSDN也能找到了。

其實作者買的也不算太貴了。

第二。

基於QT的程式碼。

https://github.com/dbzhang800/QtXlsxWriter

這個庫可以讀取XLSX的格式。其實是這個格式目前也開源了。

當然前提是你用QT,這個工程量優點浩大。

第三,

xlslib,這個庫可以讀取寫入xls格式的

http://sourceforge.net/projects/xlslib/?source=navbar

如果你是用.NET,你就太幸福了。可選的多了取了。

 http://blog.wwery.cn/?p=210

 什麼你想把.NET的庫轉換為C++可以使用?這個……希望你能成功。

相關推薦

C++EXCEL檔案方式比較

因為有些朋友問程式碼的問題,將OLE讀寫的程式碼分享在這個地方,大家請自己看。 http://blog.csdn.net/fullsail/article/details/8449448 C++讀取Excel的XLS檔案的方法有很多,但是也許就是因為方法太多,大家在選

c++Excel檔案

#include <fstream> #include <string> #include <iostream> #include <sstrea

C++excel檔案(三)—— 用OLE

轉自http://blog.csdn.net/yukin_xue/article/details/11209283 參考博文: http://blog.csdn.net/rekrad/article/details/7666196http://blog.csdn.net/

C#Excel表格文件NPOI方式無需安裝office .xls後綴沒問題

key 表頭 調試 成功 c++ exc reat 搜索 neu /// <summary> /// 讀Excel /// </summary> /// <param name="fileN

C#EXCEL(OLEDB方式

  用OLEDB方式讀取EXCEL的速度是非常快的。但是當Excel資料量很大時。會非常佔用記憶體,當記憶體不夠時會丟擲記憶體溢位的異常。      OLEDB方式將Excel作為一個數據源,直接用Sql語句操作資料,並且不需要安裝Office Excel就可以使用。但缺點

(轉)用PythonExcel檔案&&幾種模組比較

關於初始化 Excel的com介面的具體細節我就不介紹了,需要的話直接查閱相關的MSDN文件即可。這裡只提幾個特殊的小問題。 要想得到一個可以操作的excel物件,一般可以有兩種方式: import win32com.client excel = win32com.client.Dispatch('Ex

C# 文字檔案並匯入Excel(一)

一、本程式的主要思想    利用ReadAllText和WriteAllText方法讀寫文字檔案,並且把他們以逗號分隔,形成能被Excel直接匯入並且分列的資料。 二、程式的執行結果    執行前,必須在相應目錄建立文字檔案,方便程式的讀寫。程式執行前的資料如圖:   程

C# WPF 利用NPOIExcel檔案

關於C#讀寫Excel檔案的方法,在網上查來查去大致有三種 1.利用Microsoft.Office.Interop.Excel提供的API進行讀寫,由於相容性比較差等原因,本人搞了半天之後放棄了。 2.利用OpenXML庫進行讀寫,由於感

C#技巧【呼叫執行緒無法訪問此物件,因為另一個執行緒擁有該物件的問題的解決辦法】【C#讀寫EXCEL原始碼提示“office檢測到此檔案存在一個問題。為幫助保護您的計算機,不能開啟此檔案”的解決】

SYD8801是一款低功耗高效能藍芽低功耗SOC,集成了高效能2.4GHz射頻收發機、32位ARM Cortex-M0處理器、128kB Flash儲存器、以及豐富的數字介面。SYD8801片上集成了Balun無需阻抗匹配網路、高效率DCDC降壓轉換器,適合用於可穿戴、物聯網

C# WPF Excel檔案

    關於C#讀寫Excel檔案的方法,在網上查來查去大致有三種     1.利用Microsoft.Office.Interop.Excel提供的API進行讀寫,由於相容性比較差等原因,本人搞了半天之後放棄了。     2.利用OpenXML庫進行讀寫,由於感覺很麻煩,

(C/C++)(/)(二進位制檔案/文字檔案)

C++寫二進位制檔案 std::ofstream fout("a.dat", std::ios::binary); int nNum = 20; std::string str("Hello, world"); fout.wr

C++XML檔案(libxml2庫)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++XML檔案(使用tinyxml庫)

使用以下程式碼之前,需要下載TinyXml庫,幷包含到工程下 #include <stdio.h> #include "tinyxml.h" #include <iostream> #include <cstring> usin

C#txt檔案的兩種方法介紹

1.新增名稱空間   System.IO;   System.Text; 2.檔案的讀取   (1).使用FileStream類進行檔案的讀取,並將它轉換成char陣列,然後輸出。 byte[] byData = new byte[100]; c

使用原生phpexcel檔案

原文地址:https://www.cnblogs.com/wujuntian/p/6696592.html 方法1:直接在js程式碼中使用window.open()開啟php介面的url,即可將php生成的excel檔案下載下來。 $mysqli = mysqli_connect('

python學習筆記之excel檔案

python 處理excel資料的兩種方式: 首選pandas庫裡pandas.read_excel函式,相對比較簡單 其次使用xlrd庫,感覺沒有pandas好用 如何寫excel,後續更新 #coding=utf-8 """ Created on

python xlrd,xlwt excel檔案

python 讀excel檔案,需要xlrd庫。下載地址:https://pypi.python.org/pypi/xlrd python 寫excel檔案,需要xlwt庫。下載地址:https://pypi.python.org/pypi/xlwt/1.1.2 下載後修改副檔名為rar,

Python進階之Excel檔案

    讀寫Excel檔案是日常工作中常用的功能,學會編寫簡單的Excel資料處理工具,可以從重複性的Excel編輯工作中解脫出來,本文描述了Window環境下如何讀寫Excel檔案。     讀寫Excel用到了xlrd、xlwt、xluntils和pyExceler

支援各種特殊字元的 CSV 解析類 (.net 實現)(C#CSV檔案)

CSV是一種十分簡潔的資料結構,在DOTNET平臺實際使用中發現微軟官方並沒有提供預設的方法,而網上好多例子發現實現並不嚴謹甚至一些含有明顯錯誤,所以後面自己實現了一個讀寫工具類,這裡發出來希望方便後面朋友(難免還是會有考慮不到的地方,可隨時郵件聯絡) 使用該工具可對csv檔案進行讀寫(甚至不用去了解CSV的

WINCE C#INI檔案

最近開發一個CE上的GPS程式,用到配置儲存,由於資料比較少且資料結構簡單,所以採用了INI格式,WINCE沒有提供windows裡讀寫ini的函式,就自己寫了一個,程式碼如下(C#):     ///////////////////////////////////////