1 1、首先在Java头引入Poi插件。2
3 packagepoiExcel;4
5 //输入输出到文件必备
6 import java.io.*;7
8 import org.apache.poi.hssf.usermodel.*;9 import org.apache.poi.hssf.util.*;10 import org.apache.poi.poifs.filesystem.*;11 2、先是把C:\1.xls的内容读取到Java里面来,逐个单元格输出12 public static void ExcelRead() throwsException {13 //确定要操作的是c:/1.xls
14 HSSFWorkbook workbook = new HSSFWorkbook(newPOIFSFileSystem(15 new FileInputStream("c:/1.xls")));16 //取第0个单元表
17 HSSFSheet sheet = workbook.getSheetAt(0);18 //sheet.getPhysicalNumberOfRows();求出所有行数
19 for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {20 //取一行操作
21 HSSFRow row =sheet.getRow(i);22 //row.getPhysicalNumberOfCells();求出本行的单元格数,也就是列数
23 for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {24 System.out.print(row.getCell(j) + "\t");25 }26 System.out.println();27 }28 }29 3、之后是在Java设置好整个单元格的样式,输出到Excel中。整个过程有点像JavaScript操作HTML的DOM节点。先构造单元格、再通过单元格构造行、最后通过行构造整张表,再把整张表输出的过程。30 public static voidExcelWrite() {31
32 //创建一个webbook,对应一个Excel文件
33 HSSFWorkbook workbook = newHSSFWorkbook();34 //在webbook中添加一个Excel单元表sheet,并设置单元表的问题
35 HSSFSheet sheet = workbook.createSheet("单元表标题");36
37 //在sheet中添加第0行,注意老版本poi对Excel的行数列数是有限制
38 HSSFRow row = sheet.createRow(0);39 //创建一个居中样式
40 HSSFCellStyle style =workbook.createCellStyle();41 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);42 //在于这个居中样式的基础上,添加表格边框样式
43 setBoderStyle(style);44 //创建第0个单元格
45 HSSFCell cell = row.createCell(0);46 //设置这个单元格的内容为“一”
47 cell.setCellValue("一");48 //设置这个单元格的格式为上面设置好的居中样式+表格边框样式
49 cell.setCellStyle(style);50 //同理创建第1个单元格并且设置好样式,下面以此类推
51 cell = row.createCell(1);52 cell.setCellValue("二");53 cell.setCellStyle(style);54 cell = row.createCell(2);55 cell.setCellValue("三");56 cell.setCellStyle(style);57
58 //创建第1行
59 row = sheet.createRow(1);60 //清空上面设置好的居中样式+表格边框样式
61 style =workbook.createCellStyle();62 //设置字体样式
63 setFontStyle(workbook, style);64 cell = row.createCell(0);65 cell.setCellValue("111");66 cell.setCellStyle(style);67 cell = row.createCell(1);68 cell.setCellValue("222");69 cell.setCellStyle(style);70 cell = row.createCell(2);71 cell.setCellValue("333");72 cell.setCellStyle(style);73 //自动调整列宽
74 allColumnAutoSize(sheet);75
76 //将文件存到指定位置
77 try{78 //false代表覆盖输出
79 FileOutputStream fileOutputStream = newFileOutputStream(80 "c:/1.xls", false);81 workbook.write(fileOutputStream);82 //人走带门
83 fileOutputStream.close();84 workbook.close();85 } catch(Exception e) {86 e.printStackTrace();87 }88
89 }90 其中,涉及到设置边框样式的方法如下:91 public static voidsetBoderStyle(HSSFCellStyle style) {92 style.setBorderTop((short) 6); //上边框为双线
93 style.setBorderRight((short) 3); //右边框为虚线
94 style.setBorderBottom((short) 1); //底边框为单线
95 style.setBottomBorderColor(HSSFColor.RED.index);//底边框为红色
96 }97 设置单元格字体的方法如下:98 public static voidsetFontStyle(HSSFWorkbook workbook, HSSFCellStyle style) {99 HSSFFont font = workbook.createFont();//要设置字体样式先要创建字体
100 font.setFontHeightInPoints((short) 16);//字号
101 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗
102 font.setItalic(true);//斜体
103 font.setColor(HSSFColor.RED.index);//字体颜色是红色
104 style.setFont(font); //把这个设置好的字体样色压入样式
105 }106 自动调整列宽的方法如下:107
108 public static voidallColumnAutoSize(HSSFSheet sheet) {109 //遍历所有单元格,把单元格皆设置为最优列宽。
110 for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {111 HSSFRow row =sheet.getRow(i);112 for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {113 sheet.autoSizeColumn(j);114 }115 }116 }117
118
119 4.总结120
121 最后整个Java文件如下,主函数就两个方法,一个EXCEL到JAVA,一个JAVA到EXCEL。实际应用这个插件,创建单元格完全可以利用for与while等循环,从一个ArrayList读取数据,不停地填充单元格。122
123 packagepoiExcel;124
125 //输入输出到文件必备
126 import java.io.*;127
128 import org.apache.poi.hssf.usermodel.*;129 import org.apache.poi.hssf.util.*;130 import org.apache.poi.poifs.filesystem.*;131
132 public classpoiTest {133
134 public static void ExcelRead() throwsException {135 //确定要操作的是c:/1.xls
136 HSSFWorkbook workbook = new HSSFWorkbook(newPOIFSFileSystem(137 new FileInputStream("c:/1.xls")));138 //取第0个单元表
139 HSSFSheet sheet = workbook.getSheetAt(0);140 //sheet.getPhysicalNumberOfRows();求出所有行数
141 for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {142 //取一行操作
143 HSSFRow row =sheet.getRow(i);144 //row.getPhysicalNumberOfCells();求出本行的单元格数,也就是列数
145 for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {146 System.out.print(row.getCell(j) + "\t");147 }148 System.out.println();149 }150 }151
152 public static voidsetBoderStyle(HSSFCellStyle style) {153 style.setBorderTop((short) 6); //上边框为双线
154 style.setBorderRight((short) 3); //右边框为虚线
155 style.setBorderBottom((short) 1); //底边框为单线
156 style.setBottomBorderColor(HSSFColor.RED.index);//底边框为红色
157 }158
159 public static voidsetFontStyle(HSSFWorkbook workbook, HSSFCellStyle style) {160 HSSFFont font = workbook.createFont();//要设置字体样式先要创建字体
161 font.setFontHeightInPoints((short) 16);//字号
162 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗
163 font.setItalic(true);//斜体
164 font.setColor(HSSFColor.RED.index);//字体颜色是红色
165 style.setFont(font); //把这个设置好的字体样色压入样式
166 }167
168 public static voidallColumnAutoSize(HSSFSheet sheet) {169 //遍历所有单元格,把单元格皆设置为最优列宽。
170 for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {171 HSSFRow row =sheet.getRow(i);172 for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {173 sheet.autoSizeColumn(j);174 }175 }176 }177
178 public static voidExcelWrite() {179
180 //创建一个webbook,对应一个Excel文件
181 HSSFWorkbook workbook = newHSSFWorkbook();182 //在webbook中添加一个Excel单元表sheet,并设置单元表的问题
183 HSSFSheet sheet = workbook.createSheet("单元表标题");184
185 //在sheet中添加第0行,注意老版本poi对Excel的行数列数是有限制
186 HSSFRow row = sheet.createRow(0);187 //创建一个居中样式
188 HSSFCellStyle style =workbook.createCellStyle();189 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);190 //在于这个居中样式的基础上,添加表格边框样式
191 setBoderStyle(style);192 //创建第0个单元格
193 HSSFCell cell = row.createCell(0);194 //设置这个单元格的内容为“一”
195 cell.setCellValue("一");196 //设置这个单元格的格式为上面设置好的居中样式+表格边框样式
197 cell.setCellStyle(style);198 //同理创建第1个单元格并且设置好样式,下面以此类推
199 cell = row.createCell(1);200 cell.setCellValue("二");201 cell.setCellStyle(style);202 cell = row.createCell(2);203 cell.setCellValue("三");204 cell.setCellStyle(style);205
206 //创建第1行
207 row = sheet.createRow(1);208 //清空上面设置好的居中样式+表格边框样式
209 style =workbook.createCellStyle();210 //设置字体样式
211 setFontStyle(workbook, style);212 cell = row.createCell(0);213 cell.setCellValue("111");214 cell.setCellStyle(style);215 cell = row.createCell(1);216 cell.setCellValue("222");217 cell.setCellStyle(style);218 cell = row.createCell(2);219 cell.setCellValue("333");220 cell.setCellStyle(style);221 //自动调整列宽
222 allColumnAutoSize(sheet);223
224 //将文件存到指定位置
225 try{226 //false代表覆盖输出
227 FileOutputStream fileOutputStream = newFileOutputStream(228 "c:/1.xls", false);229 workbook.write(fileOutputStream);230 //人走带门
231 fileOutputStream.close();232 workbook.close();233 } catch(Exception e) {234 e.printStackTrace();235 }236
237 }238
239 public static void main(String[] args) throwsException {240 ExcelRead();241 ExcelWrite();242 }243
244 }