1. 程式人生 > >C++操作Excel學習筆記(一)

C++操作Excel學習筆記(一)

C++讀取Excel檔案方式比較

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格式文件的例子。可以實際操作的方式不強。

相關推薦

C++操作Excel學習筆記

C++讀取Excel檔案方式比較 C++讀取Excel的XLS檔案的方法有很多,但是也許就是因為方法太多,大家在選擇的時候會很疑惑。 由於前兩天要做導表工具,比較了常用的方法,總結一下寫個短文, 1.OLE的方式 這個大約是最常用的方式,這個方式其實啟動了一個EXCEL的程序在背後讀寫EXCEL檔案,這

C++ GUI Qt4學習筆記

這一章介紹瞭如何把基本的C++只是與Qt所提供的功能組合起來建立一些簡單的圖形使用者介面應用程式。 引入兩個重要概念:一個是“訊號和槽”,另一個是“佈局”。 視窗部件(widget)是使用者介面的一個視覺化元素,相當於windows系統中的“控制元件”和“容器”。任意視窗部

C# EmguCV學習筆記---影象加減法操作

影象加法: 使用Image.Add()方法,可以讓兩張圖片相加,或者讓當前影象加上一個色彩值,另外你也可以使用CvInvoke.Add()方法執行相同的操作。 Image.Add()方法內部就是呼叫CvInvoke.Add()方法實現的。 Image.Add()有3個實現,

c 語言學習筆記基礎

lac alert https 內容 con 標記 prime c++ prime c基礎 近期工作上有對C語言算法上的需求,所以要學C,上學的時候沒學過,只學過半年的Java(我是專升本,本科學的材料),2015年工作後也學過C,那時候的需求是能看懂就可以,也就沒深入研究

EF6 學習筆記:Code First 方式生成數據庫及初始化數據庫實際操作

view sqlserver 4.5 xpl 安裝 右鍵 ef6 字符串 ref 參考原文地址: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-wit

C#可擴展編程之MEF學習筆記:MEF簡介及簡單的Demo

com ring this exec hosting code .cn 引用 展開 在文章開始之前,首先簡單介紹一下什麽是MEF,MEF,全稱Managed Extensibility Framework(托管可擴展框架)。單從名字我們不難發現:MEF是專門致力於解決擴展性

C++學習筆記——一個字符串分割和統計的工具TextUtils

發生 插入 exit 大小 按行讀取 位置 n) fstream ostream 第一講先從一個實例開始——我們需要完成一個遍歷文件並統計單詞出現次數的任務。分解功能:首先,按行讀取文件並舍棄可能的空行。其次,將每一行都按照空格劃分單詞。因為可能存在標點符號,我們還需要將標

學習筆記:使用K近鄰演算法檢測web異常操作

黑客入侵Web伺服器後,通常會通過系統漏洞進一步提權,獲得ROOT許可權。我們可以通過蒐集LINUX伺服器的bash操作日誌,通過訓練識別出特定使用者的操作習慣,然後進一步識別出異常操作的行為。 1.資料蒐集        訓練集包括50個使用者的操作

C學習筆記-程式設計作業

C學習筆記(一)-程式設計作業 第十一週作業: [Loop]雙基迴文數 [Loop]校門外的樹 [Algorithm]約瑟夫環 [Recursion] 漢諾塔 [Algorithm]紀念郵票 [algorithm]

HIVE簡明教程學習筆記——資料庫及表的操作HIVE DDL

1.建立資料庫 create database if not exists aa_db; 2.檢視資料庫定義 describe database aa_db; 3.檢視資料庫列表 show databases; 4.刪除資料庫 drop database if exists testdb casca

Excel中VBA程式設計學習筆記

1、註釋及編碼規則 註釋: 單引號:可以位於句子結尾或者單獨一行; Rem:單獨一行   編碼規則: 如果VB中的關鍵字是由多個英文字母組成,則系統自動將每個單詞的首字母轉換成大寫字母,其餘字母一律轉換成小寫字母。 對於使用者自定義的變數名、

C++學習筆記

在C++程式中,定義main函式和定義其他函式一樣。定義函式必須指定四個元素:返回型別、函式名、圓括號內的形參表(可能為空)和函式體。 main函式的返回值必須是int型別,int型別是內建型別。 關於函式的編譯:在Linux系統下,呼叫g++編譯器——>g++ p

北京大學MOOC C++學習筆記

引用: 定義引用時一定要將其初始化成引用某個變數。 初始化後,它就一直引用該變數,不會再引用別的變量了。 引用只能引用變數,不能引用常量和表示式。 double a = 4, b = 5; double & r1 = a; double & r2 = r

C++學習筆記資料型別、資料處理、複合型別、迴圈、分支

     過段時間打算上手OpenCV,自己不是特別喜歡Python這個語言,幹嵌入式時間久了還是對C有種執念,同時C++在嵌入式應用以及影象處理方面也是有很大佔有量的,所以從國慶假期開始上手C++,當然學好C++絕非短時間能辦到的,這需要大量的練習和使用,給自己加個油吧,不

C# WPF 基礎教程 視訊學習筆記

1.[STAThread()] 代表單執行緒 2.using語句允許程式設計師指定使用資源的物件應當何時釋放資源 3.Border 一般用於裝載面板   Padding 邊框和內部內容中間新增空間   CornerRadius可以使邊框具有一個圓角     4.DockP

OpenCV學習筆記環境配置、影象基本操作、Mat物件

     終於,在國慶假期結束後開始上手OpenCV,一直嚮往著學習影象處理,上手OpenCV後越發覺得影象處理的有趣,確實OpenCV對於培養學習影象處理的興趣以及作為深究演算法的開始無疑是適合的。      我所使用的環境是Win10+OpenCV3.4.3+VS201

C++學習筆記——leetcode記錄

C++學習筆記(一)——leetcode記錄 944. Delete Columns to Make Sorted [Easy] 852. Peak Index in a Mountain Array [Easy] 942. DI String

C語言學習入們到精通之學習筆記

為什麼我通過部落格的形式與大家分享我的學習筆記     對於c語言的學習已經有快3年之久了,對於學習嵌入式的我看來,C是我們的根本也就是我們的核心知識點,想學習好嵌入式就必須精通C語言。在一年之前我對C語言的認識只停留在表面,只會用C語言寫寫51微控制器或STM32的控制程

python 學習筆記—目錄檔案的操作

    python對目錄檔案的操作是依靠os模組的。使用該模組需要匯入: import os   1. 得到當前的工作目錄: os.getcwd() 'e:\\python programs'   2. 改變當前的工作目錄 os.chdir(path) #示例:

深入理解C指標學習筆記

第一章 認識指標 指標在C和C++中隨處可見,它給程式設計師帶來了極大的方便,指標為動態記憶體的分配提供了重要支援。使用指標我們可以方便的操控記憶體,提高程式的執行效率;同時利用指標變數我們可以實現各種資料結構,例如連結串列等;另一方面指標與陣列的表示法