在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

猜你喜欢

转载自blog.csdn.net/Wuzm_/article/details/83095881
今日推荐