Excel格式说明
1、Excel有xls、xlsx两种格式,推荐使用xlsx,因为没有行数限制。
2、整个Excel文件是一个Workbook,每个Workbook由多个Sheet组成,一个Sheet有多Row,一个Row有多个Cell。拿一个Excel文件去说明。
ExcelHelpers使用
1、看文档研究ExcelHelpers。它是对poi库的简单封装,更多功能看poi的文档。
2、注意的问题,如果使用公式的话,如果运行期间改变了数值,并且想得到计算后的单元格的值,需要手动调用evaluateAllFormulas()。
3、演示:使用代码读取遍历一个Excel文件。
4、演示:使用代码创建一个Excel文件,填充一些数据,然后保存。
限定符和类型 | 方法和说明 |
---|---|
static void |
close(org.apache.poi.ss.usermodel.Workbook wb) 关闭Workbook |
static org.apache.poi.ss.usermodel.CellStyle |
createCellStyle(org.apache.poi.ss.usermodel.Cell cell) 创建CellStyle对象 |
static org.apache.poi.xssf.usermodel.XSSFChart |
createChart(org.apache.poi.ss.usermodel.Sheet sheet, int col1, int row1, int col2, int row2) 在sheet上创建一个图表对象,显示到左上角坐标为(col1,row1)、右下角坐标为(col2,row2)这个位置。 |
static org.apache.poi.xssf.usermodel.XSSFChart |
createChart(org.apache.poi.ss.usermodel.Sheet sheet, int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2) 在sheet上创建一个图表对象,显示到左上角坐标为(col1,row1)、右下角坐标为(col2,row2)这个位置。 |
static org.apache.poi.hssf.usermodel.HSSFWorkbook |
createXLS() 创建旧的2003格式(*.xls)的Excel文档Workbook对象。 |
static org.apache.poi.xssf.usermodel.XSSFWorkbook |
createXLSX() 创建新格式(*.xlsx)的Excel文档Workbook对象。 |
static void |
evaluateAllFormulas(org.apache.poi.ss.usermodel.Workbook wb) 重新计算workbook这个表格中所有的公式。 |
static org.apache.poi.ss.usermodel.Cell |
getCell(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex) 得到sheet的第rowIndex行的第colIndex列的单元格。 |
static Double |
getCellDoubleValue(org.apache.poi.ss.usermodel.Cell cell) 获得cell的Double类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static Double |
getCellDoubleValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex) 获得sheet的第rowIndex行的第colIndex列的Double类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static Integer |
getCellIntValue(org.apache.poi.ss.usermodel.Cell cell) 获得cell的Integer类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static Integer |
getCellIntValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex) 获得sheet的第rowIndex行的第colIndex列的Integer类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static java.time.LocalDateTime |
getCellLocalDateTimeValue(org.apache.poi.ss.usermodel.Cell cell) 获得cell的LocalDateTime类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static java.time.LocalDateTime |
getCellLocalDateTimeValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex) 获得sheet的第rowIndex行的第colIndex列的LocalDateTime类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static java.time.LocalDate |
getCellLocalDateValue(org.apache.poi.ss.usermodel.Cell cell) 获得cell的LocalDate类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static java.time.LocalDate |
getCellLocalDateValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex) 获得sheet的第rowIndex行的第colIndex列的LocalDate类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static String |
getCellStringValue(org.apache.poi.ss.usermodel.Cell cell) 获得cell的String类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static String |
getCellStringValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex) 获得sheet的第rowIndex行的第colIndex列的String类型的值,如果值是空的或者不存在这个单元格,则返回null。 |
static org.apache.poi.ss.usermodel.Workbook |
openFile(byte[] bytes) 打开Excel文件,文件的内容是bytes,返回文档的Workbook对象。 |
static org.apache.poi.ss.usermodel.Workbook |
openFile(File file) 打开Excel文件file,返回文档的Workbook对象。 |
static org.apache.poi.ss.usermodel.Workbook |
openFile(InputStream inStream) 打开inStream代表的Excel文件,返回文档的Workbook对象。 |
static org.apache.poi.ss.usermodel.Workbook |
openFile(String filename) 打开Excel文件filename,返回文档的Workbook对象。 |
static void |
saveToFile(org.apache.poi.ss.usermodel.Workbook workbook, File file) 把workbook保存到文件file中。 |
static void |
saveToFile(org.apache.poi.ss.usermodel.Workbook workbook, String filename) 把workbook保存到文件filename中。 |
static void |
setCellValue(org.apache.poi.ss.usermodel.Cell cell, Object value) 设置cell的值,根据传入的value类型会自动设置单元格的cellStyle。 |
static void |
setCellValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex, Object value) 设置sheet这个页的第rowIndex行的第colIndex列的值为value。 |
static byte[] |
toByteArray(org.apache.poi.ss.usermodel.Workbook workbook) 把workbook生成为内容的字节数组 |
无论在界面上显示的是什么,编程都是从第零行第零列开始数的。
所以的数据类型都是继承与object类型的,因此传入String,int等类型都没事
package Part4; import com.yzk18.docs.ExcelHelpers; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public class 遍历Excel文件1 { public static void main(String[] args) { Workbook workbook=ExcelHelpers.openFile("d:/temp/工作簿1.xlsx"); for (int sheetIndex=0;sheetIndex遍历到有Null存在,出现了问题,DEbug一下
看它在表格的哪里
可能在Excel文件中有些空cell中存在数据,调试一下如果遇到null就跳过
又运到问题,sheet2打印不出来。继续找问题,Cannot invoke "org.apache.poi.ss.usermodel.Row.getFirstCellNum()" because "row" is null。它说我行是空。OK,那我就在行中加入,遇到null就跳过。
OK成功了
Excel遍历完整代码
package Part4; import com.yzk18.docs.ExcelHelpers; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public class 遍历Excel文件1 { public static void main(String[] args) { Workbook workbook=ExcelHelpers.openFile("d:/temp/工作簿1.xlsx"); for (int sheetIndex=0;sheetIndex
创建Excel文件
package Part4; import com.yzk18.docs.ExcelHelpers; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class 创建Excel文件1 { public static void main(String[] args) { XSSFWorkbook worbook = ExcelHelpers.createXLSX(); XSSFSheet sheet = worbook.createSheet(); ExcelHelpers.setCellValue(sheet,0,0,"姓名"); ExcelHelpers.setCellValue(sheet,0,1,"年龄"); ExcelHelpers.setCellValue(sheet,0,2,"手机号"); ExcelHelpers.setCellValue(sheet,1,0,"小明"); ExcelHelpers.setCellValue(sheet,1,1,18); ExcelHelpers.setCellValue(sheet,1,2,"18888888888888"); ExcelHelpers.setCellValue(sheet,2,0,"小红"); ExcelHelpers.setCellValue(sheet,2,1,19); ExcelHelpers.setCellValue(sheet,2,2,"139999999999999"); ExcelHelpers.saveToFile(worbook,"d:/temp/1.xlsx"); } }
效果