axlsx报表工具(三)——创建图表

饼图

      axlsx创建饼状图非常简单,上图:

wb.add_worksheet(:name => "Pie Chart") do |sheet|
  sheet.add_row ["First", "Second", "Third", "Fourth"]
  sheet.add_row [1, 2, 3, 4]
  sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title=> 'dark corner here') do |chart|
    chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]    #数据点序列及其名称
    chart.d_lbls.show_val = true       #是否在饼状图中显示数值
    chart.d_lbls.show_percent = true    #是否在饼状图中显示所占百分比
    chart.d_lbls.d_lbl_pos = :outEnd    #图例位于图标外部
    chart.d_lbls.show_leader_lines = true  #是否显示数据和数值间的指示线
  end
end

      在add_chart方法中,第一个参数指定图标的类型Aslsx::Pie3DChart,而start_at和end_at分别指定图表的 左上角单元格右下角+1单元格,注意图中饼图的右下角单元格是E15即[4,14],而end_at是[5,15],所以称为右下角+1单元格,此外注意和excel编号不同,这里单元格序号是从0开始的。
      chart.add_series方法是创建图表的主要方法,用来添加点序列的值及其名称。
      chart.d_lbls是Data Lables的缩写,顾名思义就是数据标签。
      饼图中每块扇形的颜色是自动生成的,如果想要手动指定也是可以的:
chart.add_series :data => sheet["A2:D2"], :labels => ["A1:D1"], :colors => ['FF0000', '00FF00', '0000FF']

折线图


 wb.add_worksheet(:name => "Line Chart") do |sheet|
  sheet.add_row ['l1','l2','l3','l4']
  sheet.add_row [1, 2, 100, '=sum(A2:C2)']
  sheet.add_chart(Axlsx::Line3DChart, :start_at => [0,2], :end_at => [8, 17], :title => "Chart") do |chart|
    chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"], :title => 'bob'
    chart.d_lbls.show_val = true
    chart.d_lbls.show_cat_name = true
    chart.catAxis.tick_lbl_pos = :none   #不在横轴上显示坐标

  end
 end

    chart.d_lbls.show_val表示显示数值,而chart.d_lbls.show_cat_name表示显示每个数值的名称。

柱形图


wb.add_worksheet(:name => "Bar Chart") do |sheet|
  sheet.add_row ["A Simple Bar Chart"]
  sheet.add_row ["First", "Second", "Third"]
  sheet.add_row [1, 2, 3]
  sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
    chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
    chart.valAxis.label_rotation = -45
    chart.catAxis.label_rotation = 45
    chart.d_lbls.d_lbl_pos = :outEnd
    chart.d_lbls.show_val = true

    chart.catAxis.tick_lbl_pos = :none
  end
  sheet.add_chart(Axlsx::Bar3DChart, :barDir => :col,:start_at => "A17", :end_at => "F30") do |chart| #barDir指定方向:bar或:col
    chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
    chart.valAxis.label_rotation = -45
    chart.catAxis.label_rotation = 45
    chart.d_lbls.d_lbl_pos = :outEnd
    chart.d_lbls.show_val = true

    chart.catAxis.tick_lbl_pos = :none
  end
 end

      这里的图表位置start_at和end_at使用了和上面不同的方式,直接使用单元格名称如A4,F17,但end_at仍然是右下角单元格+1。其他代码的自解释性很强,无须赘述了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
public static int createdExcel(String PATH, List list, String title, String[] rowsName, String merged) { try { File myFile = new File(PATH); if (!myFile.exists()) { myFile.createNewFile(); } WritableWorkbook wbook = Workbook.createWorkbook(myFile); // 创建一个可写返回工作薄同给定文件名 WritableSheet wsheet = wbook.createSheet(title, 0); // sheet名称 // 设置字体 WritableFont wfont = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.BOLD); WritableCellFormat wcfFC = new WritableCellFormat(wfont); wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); //单元格边缘线格式设置 wcfFC.setAlignment(jxl.format.Alignment.CENTRE); // 居中对齐 wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中 //wcfFC.setBackground(jxl.format.Colour.BLUE); // 蓝色底 // 设置行高和列宽 //wsheet.setColumnView(列数, 列宽); //wsheet.setRowView(行数, 行高); // 开始生成主体内容 for (int i = 0 ; i < rowsName.length; i++) { wsheet.addCell(new Label(i, 0, rowsName[i], wcfFC)); wsheet.setColumnView(i, 12); } wfont = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD); wcfFC = new WritableCellFormat(wfont); wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); //单元格边缘线格式设置 //是数字时的格式化 // jxl.write.NumberFormat numberFormat = new jxl.write.NumberFormat(NumberFormat.CURRENCY_DOLLAR); // jxl.write.WritableCellFormat wcfFCNUMBER = new jxl.write.WritableCellFormat(wfont,numberFormat); // wcfFCNUMBER.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); //单元格边缘线格式设置 // wcfFCNUMBER.setAlignment(jxl.format.Alignment.CENTRE); // 居中对齐 // wcfFCNUMBER.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直居中 //是数字时的格式化 wcfFC.setWrap(true); //合并单元格操作 //wsheet.mergeCells(坐标列1, 坐标行1, 坐标列2, 坐标行2) for (int i = 0; i < list.size(); i++) { String[] args = (String[]) list.get(i); for (int j = 0; j < args.length; j ++) { if (args[j].length()<15 ) { wsheet.addCell(new jxl.write.Number(j, i+1, Float.parseFloat(args[j]), wcfFC)); } else { wsheet.addCell(new Label(j, i+1, args[j], wcfFC)); } } if (merged.indexOf("," + (i+1) + ",") >=0) { wsheet.mergeCells(0, i+1, args.length-1, i+1); wsheet.setRowView(i, 1000); } //打印分页符 if (i % 20 == 0) { //wsheet.addRowPageBreak(i); } } // 主体内容生成结束 wbook.write(); // 写入文件 wbook.close(); return 1; } catch (Exception ex) { ex.printStackTrace(); return 0; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值