1 1、首先在Java头引入Poi插件。
2
3 package poiExcel;
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() throws Exception {
13 //确定要操作的是c:/1.xls
14 HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(
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 void ExcelWrite() {
31
32 // 创建一个webbook,对应一个Excel文件
33 HSSFWorkbook workbook = new HSSFWorkbook();
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 = new FileOutputStream(
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 void setBoderStyle(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 void setFontStyle(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 void allColumnAutoSize(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 package poiExcel;
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 class poiTest {
133
134 public static void ExcelRead() throws Exception {
135 //确定要操作的是c:/1.xls
136 HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(
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 void setBoderStyle(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 void setFontStyle(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 void allColumnAutoSize(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 void ExcelWrite() {
179
180 // 创建一个webbook,对应一个Excel文件
181 HSSFWorkbook workbook = new HSSFWorkbook();
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 = new FileOutputStream(
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) throws Exception {
240 ExcelRead();
241 ExcelWrite();
242 }
243
244 }