1. 程式人生 > >在VS2017中使用Xlslib對Excel進行操作

在VS2017中使用Xlslib對Excel進行操作

/*
2018-10-12 16:57:05
使用xlslib來對Excel檔案的一些操作
VS2017編譯的一些問題    (這個庫只支援寫)
*/
詳細的編譯過程見
參考:https://www.cnblogs.com/dongc/p/8256813.html

參照上述解決問題之前
先將所有的檔案轉換成dos風格
使用notepad++進行轉化
    Edit->EOLConversion->Windows(CR LF) 轉換成這種格式
    

錯誤資訊:
error MSB3073: 命令“
echo 
D:\WindowsProgram\xlslib-package-2.5.0\xlslib\xlslib\build\msvc2017\bin/Win32_MSVC2012.Debug\createDLL -MWin32 -n
D:\WindowsProgram\xlslib-package-2.5.0\xlslib\xlslib\build\msvc2017\bin/Win32_MSVC2017.Debug\xlslib_dll.map -l
D:\WindowsProgram\xlslib-package-2.5.0\xlslib\xlslib\build\msvc2017\obj/xlslib_dll_Win32_MSVC2017.Debug\ -i
D:\WindowsProgram\xlslib-package-2.5.0\xlslib\xlslib\build\msvc2017\bin/Win32_MSVC2017.Debug\xlslib_dll.lib -W
D:\WindowsProgram\xlslib-package-2.5.0\xlslib\xlslib\build\msvc2017\obj/xlslib_dll_Win32_MSVC2012.Debug\

錯誤解決方式
屬性->生成事件->生成後的事件 -> 命令列 ->從父集繼承    (編譯一次 就會出現該選項的)

如果需要寫入中文 該怎麼使用?
測試使用xlslib進行寫檔案
在寫入的時候預設用的string

寫入的部分程式碼:

    workbook wb;
    xf_t* xf = wb.xformat();
    worksheet* ws = wb.sheet(L"中文");
    std::string label = "Hello, World!";
    ws->label(0, 0, label, xf); // 從0開始數,第1行,第2列,即C3
    wb.Dump("workbook.xls");


看sheet 以及 label的實現

//sheet實現部分
worksheet* workbook::sheet(const string& sheetname)
{
    u16string str16;

    worksheet* pnewsheet = new worksheet(m_GlobalRecords, m_sheetIndex++);
    m_GlobalRecords.char2str16(sheetname, str16);

    m_Sheets.push_back(pnewsheet);

    // NOTE: Streampos defaults to 0
    // It has to be set somewhere else
    m_GlobalRecords.AddBoundingSheet(0, BSHEET_ATTR_WORKSHEET, str16);

    // Return a pointer to the just added sheet
    return m_Sheets.back();
}

worksheet* workbook::sheet(const ustring& sheetname)    //ustring 看定義 知道是 wstring
{
    u16string str16;

    worksheet* pnewsheet = new worksheet(m_GlobalRecords, m_sheetIndex++);
    m_GlobalRecords.wide2str16(sheetname, str16);

    m_Sheets.push_back(pnewsheet);

    // NOTE: Streampos defaults to 0
    // It has to be set somewhere else
    m_GlobalRecords.AddBoundingSheet(0, BSHEET_ATTR_WORKSHEET, str16);

    // Return a pointer to the just added sheet
    return m_Sheets.back();
}

//label實現部分
cell_t* worksheet::label(unsigned32_t row, unsigned32_t col,
                         const std::string& strlabel, xf_t* pxformat)
{
    label_t* lbl;

    lbl = new label_t(m_GlobalRecords, row, col, strlabel, pxformat);
    AddCell(lbl);

    return lbl;
}

cell_t* worksheet::label(unsigned32_t row, unsigned32_t col,
                         const ustring& strlabel, xf_t* pxformat)
{
    label_t* lbl;

    lbl = new label_t(m_GlobalRecords, row, col, strlabel, pxformat);

    AddCell(lbl);

    return lbl;
}


根據上面給出的介面 可以很好的寫入中文

在需要使用中文的情況下 使用寬字元的形式即可

這個庫只支援寫Excel檔案 我的天啦 = =

設定字型
參考:https://blog.csdn.net/davidsu33/article/details/43153701?utm_source=copy 

Windows的一些:

新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑體:SimHei
宋體:SimSun
新宋體:NSimSun
仿宋:FangSong
楷體:KaiTi
仿宋_GB2312:FangSong_GB2312
楷體_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微軟雅黑體:Microsoft YaHei

裝Office會生出來的一些:

隸書:LiSu
幼圓:YouYuan
華文細黑:STXihei
華文楷體:STKaiti
華文宋體:STSong
華文中宋:STZhongsong
華文仿宋:STFangsong
方正舒體:FZShuTi
方正姚體:FZYaoti
華文彩雲:STCaiyun
華文琥珀:STHupo
華文隸書:STLiti
華文行楷:STXingkai
華文新魏:STXinwei
--------------------- 

有更好的處理Excel的開源庫 Xlnt