1. 程式人生 > >嘗試:在linux下解析excel資料

嘗試:在linux下解析excel資料

【前言】先贊一個,這種變態的需求。

Direct reading and writing Excel files

LibXL is a library that can read and write Excel files. It doesn't require Microsoft Excel and combines an easy to use and powerful features. Library can be used to

  • Generate a new spreadsheet from scratch
  • Extract data from an existing spreadsheet
  • Edit an existing spreadsheet

LibXL can help your applications in exporting and extracting data to/from Excel files with minimum effort. Also it can be used ever as report engine. Library can be used in C, C++, C#, Delphi, Fortran and other languages. Supports Excel 97-2003 binary formats (xls) and Excel 2007/2010 xml formats (xlsx). Supports Unicode and 64-bit platforms. There are a wrapper for .NET developers and separate Mac and Linux edition.

Simple interoperate, no more Excel dependency

LibXL has C/C++ headers, Delphi unit and .NET assembly for including in your project. No OLE automation.

Customizing the look and feel

LibXL supports numerous formatting options: alignments, borders, colors, fill patterns, fonts, merging cells and so on.

High performance

Writing speed is about 2 100 000 cells per second for numbers and 240 000 cells per second for 8-character random strings in binary format (CPU 3.2 GHz).

Royalty-free distribution with your application

Our customers can use this library in theirs commercial applications without any fees.

Code example: generate a new spreadsheet from scratch

#include "libxl.h"
using namespace libxl;

int main() 
{
    Book* book = xlCreateBook();
    if(book)
    {
        Sheet* sheet = book->addSheet(L"Sheet1");
        if(sheet)
        {
            sheet->writeStr(2, 1, L"Hello, World !");
            sheet->writeNum(3, 1, 1000);
        }
        book->save(L);
        book->release();
    } 
    return 0;
}

Code example: extract data from an existing spreadsheet

Book* book = xlCreateBook();
if(book)
{
    if(book->load(L))
    {
        Sheet* sheet = book->getSheet(0);
        if(sheet)
        {
            const wchar_t* s = sheet->readStr(2, 1);
            if(s) wcout << s << endl;

            double d = sheet->readNum(3, 1);
            cout << d << endl;
        }
    }

    book->release();
}

Code example: edit an existing spreadsheet

Book* book = xlCreateBook();
if(book) 
{                
    if(book->load(L))
    {
        Sheet* sheet = book->getSheet(0);
        if(sheet) 
        {   
            double d = sheet->readNum(3, 1);
            sheet->writeNum(3, 1, d * 2);
            sheet->writeStr(4, 1, L"new string");
        }
        book->save(L);
    }

    book->release();   
}

Code example: apply formatting options

Font* font = book->addFont();
font->setName(L"Impact");
font->setSize(36);        

Format* format = book->addFormat();
format->setAlignH(ALIGNH_CENTER);
format->setBorder(BORDERSTYLE_MEDIUMDASHDOTDOT);
format->setBorderColor(COLOR_RED);
format->setFont(font);
           
Sheet* sheet = book->addSheet(L"Custom");
if(sheet)
{
    sheet->writeStr(2, 1, L"Format", format);
    sheet->setCol(1, 1, 25);
}

book->save(L);