1 package com.what21.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 import org.apache.poi.hssf.usermodel.HSSFCell; 10 import org.apache.poi.hssf.usermodel.HSSFRow; 11 import org.apache.poi.hssf.usermodel.HSSFSheet; 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 13 import org.apache.poi.xssf.usermodel.XSSFCell; 14 import org.apache.poi.xssf.usermodel.XSSFSheet; 15 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 16 17 public class TestPoi { 18 public static void updateExcel(File exlFile, String sheetName, int col, 19 int row, String value) throws Exception { 20 FileInputStream fis = new FileInputStream(exlFile); 21 HSSFWorkbook workbook = new HSSFWorkbook(fis); 22 // workbook. 23 HSSFSheet sheet = workbook.getSheet(sheetName); 24 HSSFCell mycell = sheet.createRow(row).createCell(col); 25 mycell.setCellValue(value); 26 HSSFRow r = sheet.getRow(row); 27 HSSFCell cell = r.getCell(col); 28 // int type=cell.getCellType(); 29 String str1 = cell.getStringCellValue(); 30 // 这里假设对应单元格原来的类型也是String类型 31 cell.setCellValue(value); 32 System.out.println("单元格原来值为" + str1); 33 System.out.println("单元格值被更新为" + value); 34 35 fis.close();// 关闭文件输入流 36 37 FileOutputStream fos = new FileOutputStream(exlFile); 38 workbook.write(fos); 39 fos.close();// 关闭文件输出流 40 } 41 42 public static void update2(String url) { 43 int coloum = 2; // 好比你要获取第1列 44 try { 45 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(url)); 46 HSSFSheet sheet = workbook.getSheet("Sheet1"); 47 48 for (int i = 0; i <= sheet.getLastRowNum(); i++) { 49 HSSFRow row = sheet.getRow((short) i); 50 if (null == row) { 51 continue; 52 } else { 53 HSSFCell cell = row.getCell((short) coloum); 54 if (null == cell) { 55 continue; 56 } else { 57 58 cell.setCellValue("he1"); 59 } 60 } 61 } 62 FileOutputStream out = null; 63 try { 64 out = new FileOutputStream(url); 65 workbook.write(out); 66 } catch (IOException e) { 67 e.printStackTrace(); 68 } finally { 69 try { 70 out.close(); 71 } catch (IOException e) { 72 e.printStackTrace(); 73 } 74 } 75 } catch (FileNotFoundException e) { 76 e.printStackTrace(); 77 } catch (IOException e) { 78 e.printStackTrace(); 79 } 80 } 81 82 public static boolean writeXlsx(String fileName, int row, int column, 83 String content) { 84 boolean flag = false; 85 FileOutputStream out = null; 86 XSSFWorkbook xwb; 87 try { 88 xwb = new XSSFWorkbook(new FileInputStream(fileName)); 89 XSSFSheet xSheet = xwb.getSheetAt(0); 90 XSSFCell xCell = xSheet.createRow(row).createCell(column); 91 xCell.setCellValue(content); 92 out = new FileOutputStream(fileName); 93 xwb.write(out); 94 out.close(); 95 flag = true; 96 } catch (IOException e) { 97 e.printStackTrace(); 98 } catch (RuntimeException e) { 99 e.printStackTrace(); 100 } 101 return flag; 102 } 103 104 public static void main(String[] args) throws Exception { 105 // TODO Auto-generated method stub 106 // 下面改为你本身的xls文件进行测试,2003格式的,不能2007 107 File file = new File("C:\\Users\\Administrator\\Desktop\\test.xls"); 108 // 下面尝试更改第一行第一列的单元格的值 109 updateExcel(file, "Sheet1", 0, 0, "hehe"); 110 update2("C:\\Users\\Administrator\\Desktop\\test.xls"); 111 File file1 = new File( 112 "C:\\Users\\Administrator\\Desktop\\test - 副本.xlsx"); 113 writeXlsx("C:\\Users\\Administrator\\Desktop\\test - 副本.xlsx", 0, 0, 114 "1"); 115 } 116 }
注意事项:若是修改的坐标对应的单元格是空,会报错。java
建议这么写:apache
HSSFCell mycell = sheet.createRow(row).createCell(col);
mycell.setCellValue(value);xss
这样写有一个问题:若是定位错误,会带来没必要要的麻烦。ide
一般在生成原始Excel时,最好能对空单元格赋空(强制添加空字符串),这样在使用SAXPOI或者SAX解析较大文本的Excel的时候,能够post
有效的避免由于空单元格而致使列数据错位的问题。测试
上面的代码是很常见的,在网上能找到一堆。根据不一样的场景能够传入一组须要修改的坐标,经过循环来修改。这样能够减小打开文件的次数,提升url
效率。spa