github地址:https://github.com/tfussell/xlnt
編譯步驟:
mkdir build
cd build
cmake ..
make
souce目錄下有動態庫
代碼栗子
#include <xlnt/xlnt.hpp>
#include <iostream>
#include <string.h>
int main()
{
xlnt::workbook wb;
xlnt::worksheet ws = wb.active_sheet();
ws.cell("A1").value(5);
ws.cell("B2").value("string data");
xlnt::font font;
xlnt::font run_font;
run_font.color(xlnt::color::blue());
run_font.name("SimSun");
// run_font.scheme("ascheme");
run_font.size(13);
ws.cell(1,7).font(run_font);
xlnt::border border;
xlnt::border::border_property border_pro;
border_pro.style(xlnt::border_style::thin);
border.side(xlnt::border_side::start,border_pro);
border.side(xlnt::border_side::end,border_pro);
border.side(xlnt::border_side::top,border_pro);
border.side(xlnt::border_side::bottom,border_pro);
// cell.border(border);
ws.cell(2,7).border(border);
xlnt::alignment alignment;
alignment.horizontal(xlnt::horizontal_alignment::center);
ws.cell(1,7).alignment(alignment);
ws.cell(1,7).value("宋體");
run_font.color(xlnt::color::red());
ws.cell(1,9).font(run_font);
ws.cell(1,9).number_format(xlnt::number_format::number_comma_separated1());
ws.cell(1,9).value(11111111.11);
ws.cell("B2").comment("中文測試a:10000.0=中文啊啊:100000222","勾稽");
ws.cell("B5").value("xxxx");
ws.cell("B5").comment("中文測試a:10000.0=中文啊啊:100000222","勾稽");
xlnt::comment com1("aaaaaaaaaaaaaaaaaaaaaaaaaa\naaaaaaaaa","xxx");
com1.size(800,800);
std::cout<<com1.height()<<std::endl;
ws.cell(2,9).comment(com1);
ws.cell(2,9).value("test ");
ws.cell("C3").formula("=RAND()");
ws.merge_cells("C3:C4");
// ws.freeze_panes("B2");
wb.save("中文1.xlsx");
char merge_range[256];
int start=65;
// char start_c=start;
int end=start+10-1;
std::sprintf(merge_range,"%c1:%c1",start,end);
std::string ss=merge_range;
std::cout << ss<<std::endl;
return 0;
}
問題
comment的size方法不起作用
查看源碼 發現 cell.cpp中comment()方法中把comment的size重新初始化爲200*100,需要自己判斷comment的size是否爲0,爲0才需要初始化。
這時重新編譯源碼,調用後發現雖然size成功設置了,但excel打開comment大小還是沒改變。
通過vim 打開excel ,發現excel由幾個xml組成,找到vmlDrawing1.vml並打開。你會找到你之前設置的comment的大小如:width:800pt;height:800pt ,那說明excel中確實設置了,只不過並沒有起作用。
這時我在Windows上自己新建了一個excel,然後手動調整了批註框的大小,然後通過vim 打開該excel,將裏面的所有xml與之前程序生成的excel的xml進行對比,總結出的結論是comment的大小與vmlDrawing1.vml下的標籤“x:Anchor”中的後四位數字有關,具體關係還需要進一步驗證
另一種解決方案:修改comment大小主要是爲了讓comment中的內容顯示完整,那麼window的excel軟件中對批註框有個設置“自適應文本大小”,對應的xml就是在vmlDrawing1.vml的標籤v:textbox中增加mso-fit-shape-to-text:t,即:”style=”mso-direction-alt:auto;auto;mso-fit-shape-to-text:t”。不知過這個在linux的excel軟件中不起作用。源碼修改就是xlsx_producer.cpp中“write_attribute(“style”, “mso-direction-alt:auto”);”修改爲“write_attribute(“style”, “mso-direction-alt:auto;auto;mso-fit-shape-to-text:t”);”即默認自適應
-如果linux平臺打開excel,那還是需要弄懂 x:Anchor裏面的內容