在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