java操作Excel

素颜马尾好姑娘i 2022-06-13 10:40 250阅读 0赞

#

现在想要导出一组数据为Excel文件,那么可以这样:(首先需要jxl.jar包,我的是jxl-2.6.jar)

  1. /**
  2. * 导出报修单
  3. * @param mapping
  4. * @param form
  5. * @param request
  6. * @param response
  7. * @return
  8. * @throws IOException
  9. * @throws WriteException
  10. */
  11. public ActionForward print(ActionMapping mapping, ActionForm form,
  12. HttpServletRequest request, HttpServletResponse response) throws IOException, WriteException {
  13. response.reset();//设置页面不缓存
  14. response.setContentType(“application/vnd.ms-excel”);//设置文件流导出格式
  15. List expendInfoList=dao.findByProperty(“states”, 1);//此为查询出数据返回为List
  16. ExpendablesfixToExcel ef=new ExpendablesfixToExcel(response.getOutputStream());//此为定义的导出EXCEL类,将输出流传入到构造函数中
  17. ef.ebfToExcel(expendInfoList);//调用导出类里的导出方法
  18. return null;
  19. }

    以下为导出方法:

  20. import java.io.IOException;

  21. import java.io.OutputStream;
  22. import java.util.List;
  23. import jxl.Workbook;
  24. import jxl.write.Label;
  25. import jxl.write.WritableCellFormat;
  26. import jxl.write.WritableFont;
  27. import jxl.write.WritableSheet;
  28. import jxl.write.WritableWorkbook;
  29. import jxl.write.WriteException;
  30. import com.ghtn.techschool.entitys.Expendablesfix;
  31. public class ExpendablesfixToExcel {
  32. OutputStream os;//输出流
  33. WritableWorkbook wb;//建立Excel文件
  34. WritableSheet ws;//sheet名称
  35. /**
  36. * 构造函数
  37. * @param os
  38. * @throws IOException
  39. */
  40. public ExpendablesfixToExcel(OutputStream os)throws IOException{
  41. this.os=os;
  42. }
  43. /**
  44. * 导出Excel方法
  45. * @param list
  46. * @throws WriteException
  47. */
  48. public void ebfToExcel(List list) throws WriteException{
  49. //设置样式(这个方法算是一个容器,可以放进去好多属性;
  50. //第一个: TIMES是字体大小,这里写的是12;第二个: BOLD是判断是否为斜体,选择true时为斜体;
  51. //第三个: ARIAL;第四个: UnderlineStyle.NO_UNDERLINE 下划线;
  52. //第五个: jxl.format.Colour.RED 字体颜色是红色的)
  53. WritableFont font2 = new WritableFont(WritableFont.TIMES, 12,
  54. WritableFont.BOLD);
  55. WritableCellFormat format2 = new WritableCellFormat(font2);
  56. format2.setAlignment(jxl.format.Alignment.CENTRE);//设置居中
  57. try{
  58. wb=Workbook.createWorkbook(os);
  59. ws=wb.createSheet(“报修单”, 0);
  60. //第一个是代表列数,
  61. //第二是代表行数,
  62. //第三个代表要写入的内容
  63. //第四个是可选项,是输入这个label里面的样式
  64. //然后通过写sheet的方法addCell()把内容写进sheet里面。
  65. Label labelA=new Label(0,0,”报修人”,format2);
  66. ws.addCell(labelA);
  67. Label labelB=new Label(1,0,”所在部门”,format2);
  68. ws.addCell(labelB);
  69. Label labelC=new Label(2,0,”报修日期”,format2);
  70. ws.addCell(labelC);
  71. Label labelD=new Label(3,0,”消耗品名称”,format2);
  72. ws.addCell(labelD);
  73. Label labelF=new Label(4,0,”消耗品报修描述”,format2);
  74. ws.addCell(labelF);
  75. writeRecruit(list);//获取动态内容的方法
  76. wb.write();//写入
  77. wb.close();//关闭
  78. }catch(Exception e){
  79. e.printStackTrace();
  80. }
  81. }
  82. private void writeRecruit(List stuList){
  83. if(stuList.size()==0){
  84. return ;
  85. }
  86. for(int i=0;i<stuList.size();i++){
  87. String person=””;//报修人
  88. if(null!=stuList.get(i).getBxr()){
  89. person=stuList.get(i).getBxr().toString();
  90. }
  91. Label labelBxr = new Label(0,i+1,person);
  92. String dept=””;//所在部门
  93. if(null!=stuList.get(i).getBm()){
  94. dept=stuList.get(i).getBm().toString();
  95. }
  96. Label labelBm=new Label(1,i+1,dept);
  97. String date=””;//报修日期
  98. if(null!=stuList.get(i).getBdate()){
  99. date=stuList.get(i).getBdate().toString();
  100. }
  101. Label labelBdate=new Label(2,i+1,date);
  102. String name=””;//消耗品名称
  103. if(null!=stuList.get(i).getExpendablesname()){
  104. name=stuList.get(i).getExpendablesname().toString();
  105. }
  106. Label labelName=new Label(3,i+1,name);
  107. String descrition=””;//消耗品报修描述
  108. if(null!=stuList.get(i).getBxzk()){
  109. descrition=stuList.get(i).getBxzk().toString();
  110. }
  111. Label labelDescrition=new Label(4,i+1,descrition);
  112. /*
  113. * 统一添加到列表中
  114. * */
  115. try{
  116. ws.addCell(labelBxr);
  117. ws.addCell(labelBm);
  118. ws.addCell(labelBdate);
  119. ws.addCell(labelName);
  120. ws.addCell(labelDescrition);
  121. }catch(Exception e){
  122. e.printStackTrace();
  123. }
  124. }
  125. }
  126. }

写入数据的时候注意的格式

(1)添加的字体样式
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
WritableFont()方法里参数说明:
这个方法算是一个容器,可以放进去好多属性
第一个: TIMES是字体大小,他写的是18
第二个: BOLD是判断是否为斜体,选择true时为斜体
第三个: ARIAL
第四个: UnderlineStyle.NO_UNDERLINE 下划线
第五个: jxl.format.Colour.RED 字体颜色是红色的

jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);

jxl.write.Label labelC = new jxl.write.Label(0, 0, “This is a Label cell”,wcfF);
ws.addCell(labelC);
在Label()方法里面有三个参数
第一个是代表列数,
第二是代表行数,
第三个代表要写入的内容
第四个是可选项,是输入这个label里面的样式
然后通过写sheet的方法addCell()把内容写进sheet里面。

(2)添加带有formatting的Number对象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat(“#.##“);

(3)添加Number对象
(3.1)显示number对象数据的格式

jxl.write.NumberFormat nf = new jxl.write.NumberFormat(“#.##“);
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);

jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);
Number()方法参数说明:
前两上表示输入的位置
第三个表示输入的内容

(4)添加Boolean对象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);

(5)添加DateTime对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
DateTime()方法的参数说明
前两个表示输入的位置
第三个表示输入的当前时间

(6)添加带有formatting的DateFormat对象
这个显示当前时间的所有信息,包括年月日小时分秒
jxl.write.DateFormat df = new jxl.write.DateFormat(“dd MM yyyy hh:mm:ss”);
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);

(7)添加带有字体颜色Formatting的对象
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);

import=”jxl.format.*
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);

(8)设置单元格样式

jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackGround(jxl.format.Colour.RED);//设置单元格的颜色为红色
wcfFC = new jxl.write.Label(6,0,”i love china”,wcfFC);

下面是一段网友操作的例子:

我写的练习代码如下:(注意里面的图片替换成自己的就可以了)

import java.io.*;

import java.util.Random;

import java.util.Date;

import jxl.*;

import jxl.format.UnderlineStyle;

import jxl.write.*;

import jxl.write.Number;

import jxl.write.Boolean;

public class CreateXL

{

  1. public CreateXL()
  2. \{
  3. \}
  4. public static void main(String\[\] args)
  5. \{
  6. //读Excel
  7. //CreateXL.readExcel("d:/abc.xls");
  8. //创建新的Excel
  9. CreateXL.writeExcel("d:/new.xls");
  10. //更新Excel
  11. CreateXL.updateExcel("d:/new.xls");
  12. \}
  13. //jxl暂时不提供修改已经存在的数据表,这里通过一个小办法来达到这个目的,不适合大型数据更新!
  14. //这里是通过覆盖原文件来更新的.
  15. public static void updateExcel(String filePath)
  16. \{
  17. try
  18. \{
  19. Workbook rwb = Workbook.getWorkbook(new File(filePath));
  20. WritableWorkbook wwb = Workbook.createWorkbook(new File("d:/new.xls"),rwb);//copy
  21. WritableSheet ws = wwb.getSheet(0);
  22. WritableCell wc = ws.getWritableCell(0,0);
  23. //判断单元格的类型,做出相应的转换
  24. Label label = (Label)wc;
  25. label.setString("The value has been modified");
  26. wwb.write();
  27. wwb.close();
  28. rwb.close();
  29. \}
  30. catch(Exception e)
  31. \{
  32. e.printStackTrace();
  33. \}
  34. \}
  35. public static void writeExcel(String filePath)
  36. \{
  37. try
  38. \{
  39. //创建工作薄
  40. WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));
  41. //创建工作表
  42. WritableSheet ws = wwb.createSheet("Sheet1",0);
  43. //System.out.println("create ok!");
  44. //添加标签文本
  45. Random rnd=new Random((new Date()).getTime());
  46. int forNumber=rnd.nextInt(100);
  47. for(int i=0;i<forNumber;i++)
  48. \{
  49. ws.addCell(new Number(rnd.nextInt(50),rnd.nextInt(50),rnd.nextInt(1000)));
  50. \}
  51. //添加图片(注意此处jxl暂时只支持png格式的图片)
  52. //0,1分别代表x,y 2,5代表宽和高占的单元格数
  53. ws.addImage(new WritableImage(0,1,2,5,new File("png//cs.png")));
  54. wwb.write();
  55. wwb.close();
  56. \}
  57. catch(Exception e)
  58. \{
  59. System.out.println(e.toString());
  60. \}
  61. \}
  62. public static void readExcel(String filePath)
  63. \{
  64. /\*\*
  65. \*后续考虑问题,比如Excel里面的图片以及其他数据类型的读取
  66. \*\*/
  67. try
  68. \{
  69. InputStream is=new FileInputStream(filePath);
  70. //声名一个工作薄
  71. Workbook rwb = Workbook.getWorkbook(is);
  72. //获得工作薄的个数
  73. //rwb.getNumberOfSheets();
  74. //在Excel文档中,第一张工作表的缺省索引是0
  75. Sheet st = rwb.getSheet("Sheet1");
  76. //通用的获取cell值的方式,getCell(int column, int row) 行和列
  77. int Rows=st.getRows();
  78. int Cols=st.getColumns();
  79. System.out.println("当前工作表的名字:"+st.getName());
  80. System.out.println("总行数:"+Rows);
  81. System.out.println("总列数:"+Cols);
  82. Cell c;
  83. for(int i=0;i<Cols;++i)
  84. \{
  85. for(int j=0;j<Rows;++j)
  86. \{
  87. //getCell(Col,Row)获得单元格的值
  88. System.out.print((st.getCell(i,j)).getContents()+"/t");
  89. \}
  90. System.out.print("/n");
  91. \}
  92. //操作完成时,关闭对象,释放占用的内存空间
  93. rwb.close();
  94. \}
  95. catch(Exception e)
  96. \{
  97. e.printStackTrace();
  98. \}
  99. \}

}

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java脚本操作Excel

    操作之前需求导入jxl.jar这个jar包。 需求描述: 1.表格中C栏为原始打分数据,D栏为建议原始打分数据不变、提高或者减少,E栏是需要打分的数据栏,根据D栏的建议进

    相关 java操作excel

    百度 此博客标题,能找到很多结果,但是内容千篇一律。 这里用的是spire.xlsx以及poi。 需求:向excel模板中插入动态数据以及向存在动态数据的excel文件中插

    相关 java操作Excel

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Wind