如何制作xls图表?

我正在尝试将应用程序数据导出为xls图表。

我正在使用SimpleXlsxWriter 。
但是我有这个lib的一些问题。


这是我使用这个库

#include <Xlsx/Workbook.h> int main() { using namespace SimpleXlsx; CWorkbook book; CWorksheet &data = book.AddSheet("Data"); std::vector<CellDataDbl> header = { 1, 3, 5, 6, 8 }; std::vector<CellDataDbl> data1 = { 2, 6, 4, 8, 5 }; std::vector<CellDataDbl> data2 = { 5, 3, 5, 2, 4 }; data.AddRow(header); data.AddRow(data1); data.AddRow(data2); CChartsheet &chart = book.AddChart("Chart", CHART_BAR); chart.SetBarDirection(CChartsheet::BAR_DIR_VERTICAL); chart.SetBarGrouping(CChartsheet::BAR_GROUP_STACKED); chart.SetTableDataState(CChartsheet::TBL_DATA); chart.SetLegendPos(CChartsheet::EPosition::POS_TOP); CChartsheet::Series ser1; ser1.valAxisFrom = CellCoord(1, 0); ser1.valAxisTo = CellCoord(1, data1.size() - 1); ser1.valSheet = &data; ser1.title = "Ser1"; CChartsheet::Series ser2; ser2.valAxisFrom = CellCoord(2, 0); ser2.valAxisTo = CellCoord(2, data2.size() - 1); ser2.valSheet = &data; ser2.title = "Ser2"; chart.AddSeries(ser1); chart.AddSeries(ser2); book.Save("test.xls"); } 

Test.png

我没有find如何显示y轴,显示水平线,设置x轴值,将图表插入数据表等方式。


这是我想要得到什么结果 Test1.png


什么样的图书馆可以帮助我,或者如何获得所需的结果? 也许SimpleXlsxWriter可以做到这一点?

你可以从SimpleXlsxWriter中得到你想要的,只需对代码进行一些修改即可。 简述:

  • 保存为SimpleXlsxWriter的格式.xlsx不是.xls
  • 将类别轴添加到您的系列之一,并将其​​设置为第一个数据行
  • 因为您希望y轴位于%刻度上,请使用BAR_GROUP_PERCENT_STACKED
  • 您可以控制您添加系列图表的顺序,以获取您想要的底部表格中的订单

考虑这个代码,build议的修改在评论中指出:

 int main() { using namespace SimpleXlsx; CWorkbook book; CWorksheet &data = book.AddSheet("Data"); std::vector<CellDataDbl> header = { 1, 3, 5, 6, 8 }; std::vector<CellDataDbl> data1 = { 2, 6, 4, 8, 5 }; std::vector<CellDataDbl> data2 = { 5, 3, 5, 2, 4 }; data.AddRow(header); data.AddRow(data1); data.AddRow(data2); CChartsheet &chart = book.AddChart("Chart", CHART_BAR); chart.SetBarDirection(CChartsheet::BAR_DIR_VERTICAL); chart.SetBarGrouping(CChartsheet::BAR_GROUP_PERCENT_STACKED); // <-- seems you want this format? chart.SetTableDataState(CChartsheet::TBL_DATA); chart.SetLegendPos(CChartsheet::EPosition::POS_TOP); chart.SetYAxisGrid(CChartsheet::EGridLines::GRID_MAJOR); // <-- to draw the horizontal lines CChartsheet::Series ser1; ser1.valSheet = &data; ser1.valAxisFrom = CellCoord(1, 0); ser1.valAxisTo = CellCoord(1, data1.size() - 1); ser1.title = "Ser1"; // Now add a category axis from your the first row of the data sheet ser1.catAxisFrom = CellCoord(0, 0); ser1.catAxisTo = CellCoord(0, data1.size() - 1); ser1.catSheet = &data; CChartsheet::Series ser2; ser2.valSheet = &data; ser2.valAxisFrom = CellCoord(2, 0); ser2.valAxisTo = CellCoord(2, data2.size() - 1); ser2.title = "Ser2"; // insert the series in the order you want from the bottom up in the chart's table chart.AddSeries(ser2); chart.AddSeries(ser1); book.Save("c:\\so\\test.xlsx"); // <-- Save as xlsx, not xls } 

结果图表