1. 程式人生 > >Ubuntu下C程式使用libxls-1.2.1庫去讀取excel表格內容

Ubuntu下C程式使用libxls-1.2.1庫去讀取excel表格內容

之前日誌說道xlslib庫只能寫excel表格,但是不能讀,但是讀又是經常需要的一個操作,,,

所以有了今天的libxls,這個就是專門用來讀excel表格的。

下載解壓然後編譯安裝

./configre

make

sudo make install

由於標頭檔案跟庫檔案的目錄放的位置不對,所以需要手動把它們拷貝到系統路徑下面去

sudo cp -r -v /usr/local/libxls/include/libxls/ /usr/include
sudo cp -r -v /usr/local/libxls/lib/ /usr

使用方法:

包括標頭檔案:#include <libxls/xls.h>

使用到的相關函式跟型別:

xlsWorkBook *pWb;

xlsWorkSheet *pWs;
struct st_row_data *row;

開啟一個excel表格

 pWb = xls_open(argv[1], "UTF-8");

讀取表格的第1頁

pWs = xls_getWorkSheet(pWb, 0);
xls_parseWorkSheet(pWs);

獲取一行(r)的內容

row = &pWs->rows.row[r];

得到某一列的文字

row->cells.cell[3].str

關閉

xls_close_WS(pWs);
xls_close_WB(pWb);

編譯命令:gcc -o readXls readXls.c  -lxlsreader

一個簡單的例子readXls.c:

#include <stdio.h>
#include <stdlib.h>
#include <libxls/xls.h>
#include <unistd.h>
/////////////////////////////////////////////////
void strrpl(char *result, char *str, char *old_str, char *new_str);
/////////////////////////////////////////////////
int main(int argc, char **argv) {
    xlsWorkBook *pWb;
    xlsWorkSheet *pWs;
    struct st_row_data *row;
    int r,c;
    char buf[512], result[512];

    if (argc < 2) {
        sprintf(stderr, "please input the xml file.");
        return EXIT_FAILURE;
    }


    // open workbook, choose standard coversion
    pWb = xls_open(argv[1], "UTF-8");
    if (NULL == pWb) {
        fprintf(stderr, "File not found!\n");
        return EXIT_FAILURE;
    }

    // open and parse the first sheet
    pWs = xls_getWorkSheet(pWb, 0);
    xls_parseWorkSheet(pWs);
    
    // process all rows of the first sheet
    for (r=0; r<=pWs->rows.lastrow; r++) {
        row = &pWs->rows.row[r];
        
        for (c=0; c<=pWs->rows.lastcol; c++) {
            if (row->cells.cell[c].str != NULL) {
                printf("%\t",
                        row->cells.cell[c].str);
            }
        }
        printf("\n");
    }
    
    // close workSheet
    xls_close_WS(pWs);

    // close workbook
    xls_close_WB(pWb);

    return 0;
}




相關推薦

UbuntuC程式使用libxls-1.2.1讀取excel表格內容

之前日誌說道xlslib庫只能寫excel表格,但是不能讀,但是讀又是經常需要的一個操作,,, 所以有了今天的libxls,這個就是專門用來讀excel表格的。 下載解壓然後編譯安裝 ./configre make sudo make install 由於標頭檔案跟庫

Ubuntu 16.04安裝Cuda 8.0, Anaconda 4.4.0和TensorFlow 1.2.1

原文連結:http://blog.csdn.net/jinzhuojun/article/details/77140806 Cuda 如果配了Nvidia卡的,可以考慮安裝Cuda,這樣之後可以用GPU加速。之前寫過一篇在Ubuntu 14.04上裝Cuda 7.5的文章(

Ubuntu系統安裝並配置hive-2.1.0

 說在前面的話   預設情況下,Hive元資料儲存在內嵌的Derby資料庫中,只能允許一個會話連線,只適合簡單的測試。實際生產環境中不使用,為了支援多使用者會話, 則需要一個獨立的元資料庫,使用MySQL作為元資料庫,Hive內部對MySQL提供了很好的支援。  在Ubuntu系統下安裝並配置h

linuxC語言程式設計日誌(1):基於TCP協議的伺服器/客戶端程式

  基於TCP協議的伺服器/客戶端程式  首先我們看一下使用TCP協議進行網路通訊的程式基本模型:伺服器首先進行初始化操作:呼叫函式socket建立一個套接字,函式bind將這個套接字與伺服器的公認地址繫結在一起,函式listen將這個套接字換成傾聽套接字,然後呼叫函式acc

Ubuntu Hadoop 1.2.1 配置安裝

本文從我的另外一個部落格轉過來,以後將大資料方面的都放在此部落格。 本文一步步記錄了 Ubuntu 環境安裝Hadoop 1.2.1 ,搭建單機模式以及偽分散式模式,希望對各位和我一樣的菜鳥有所幫助,共同學習進步,歡迎交流。嘗試2.1安裝未遂,由於檔案結構不太一樣缺乏相

Hadoop-1.2.1/1.0.1 install on Ubuntu

1.hadoop-1.2.1官方包:點我    Hadoop-1.0.1官方包:點我 1.1 解壓到home目錄中的Hadoop下 sudo tar -zxvf 包名 cd hadoop-1.2.1 2.jdk 1.6 點我  &nbs

Ubuntu 18.04 中 PyCharm 2018.2.1 無法切換搜狗中文輸入法的解決方案

Ubuntu 18.04 中 PyCharm 2018.2.1 無法切換搜狗中文輸入法的解決方案 Ubuntu 18.04 中 PyCharm 2018.2.1 無法切換搜狗中文輸入法的解決方案 0. 參考資料

【netcore基礎】ubuntu 16.04 搭建.net core 2.1 linux 執行環境 nginx反向代理 supervisor配置自啟動 【.NetCore學習】ubuntu16.04 搭建.net core mvc api 執行環境 .Net Core 部署到Ubuntu 16.0

今天來整理下netcore在linux(ubuntu)上的執行環境搭建   對應版本 ubuntu 16.04 .net core 2.1 nginx version: nginx/1.10.3 (Ubuntu) supervisor Supervisorhttp://super

C語言——兩種方法計算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

方法一:首先我們先觀察這個數學式子的規律,可以發現奇數項均為正數,偶數項均為負數。則我們可以利用條件語句if來判斷奇偶,最後分別對奇數項和偶數項求和。 原始碼: #include<stdio.h> #include<stdlib.h> int main() {

pow函式(數學次方)在c語言的用法,兩種編寫方法例項( 計算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值)

關於c語言裡面pow函式,下面借鑑了某位博主的一篇文章: 標頭檔案:#include <math.h> pow() 函式用來求 x 的 y 次冪(次方),x、y及函式值都是double型 ,其原型為:    double pow(double x, double y

分支語句——c++程式的控制結構1

程式 由若干條語句組成,各語句按照順序一條一條地執行,這種順序結構是簡潔的。但在現實世界中,在解決問題的過程中,不可避免地遇到需要進行選擇戊需要迴圈I作的情況。這時,程式執行的順序需要發生變化,而非從前向後逐一執行。因此程式中除了順序結構以外,通常還有選擇結構迴圈結構以及轉移機制。 if

ThinkPHP學習(一) WindowsNginx+PHP5+ThinkPHP 3 2 1的安裝與配置

                工具原料:Nginx153:網盤下載地址:http://pan.baidu.com/s/1qWNgLf2php-5.3.28-nts-Win32-VC9-x86網盤下載地址:http://pan.baidu.com/s/1pdukYThinkPHP_3.2.1網盤下載地址:ht

C語言】計算1-1/2+1/3-1/4+1/5 …… + 1/99

//計算1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100的值 #include <stdio.h> int main() { float sum=0; fl

演算法的樂趣c/c++ —— 1.2.1入門習題

宣告:摘選自“ 演算法競賽入門經典(第2版)”作者:  劉汝佳  /  陳鋒   ISBN:9787302291077 迴圈小數 輸入整數a和b(0≤a≤3000,1≤b≤3000),輸出a/b的迴圈小數表示以及迴圈節長度。 例如a=5,b=

C/C++程式碼練習11】1-1/2+1/3-1/4+...+1/n的兩種計算方法

方法一: #include <stdio.h> #include <math.h> int main(void) { int n; scanf("%d",

c語言:求多項式1-1/2+1/3-1/4+...+1/99-1/100的值,3種迴圈實現

方法一:for迴圈實現 程式: #include<stdio.h> int main() { double i = 0, t = 0,sum = 0,sign = -1; for (i =

c語言入門之專案4.2——利用for迴圈求1+1/2!+1/3!...+1/7!

編譯程式碼 /*********************** **專案【4.2】利用for迴圈求1+1/2!+1/3!...+1/7!** **題目:利用for迴圈求運算** **作者:李坤** **

python機器學習及實踐 第二章的2.1.2.1線性迴歸器程式報錯Reshape your data either using array.reshap(-1,1)的原因及解決方法

最近在看Python機器學習及實踐(從零開始kaggle競賽之路)這本書,到了第二章的線性迴歸器的GradientBoostingRegressor模型照著敲程式碼的時候 出現了以下的錯誤 出錯的問題在於標準化函式這裡。 可見fit_tran

C語言訓練】計算t=1+1/2+1/3+...+1/n

題目連結:http://115.28.203.224/problem.php?cid=1010&pid=30 題目描述 計算t=1+1/2+1/3+...+1/n 輸入 整型變數n 輸出 t(保

c語言計算1/1-1/2+1/3-1/4+1/5 …… + 1/99

1.第一種方法我們首先觀察這個式子的規律,奇數項為正數,偶數項為負數。我們用條件語句判斷奇偶,然後分別求和!!!#include<stdio.h>int main(){double sum;int i;for (i = 1; i <= 100; i++){i