Java读取Excel内容

转自:http://blog.csdn.net/ygzk123/article/details/12623985


  1. 借助于apathe的<a target="_blank" href="http://files.cnblogs.com/gmq/poi.rar">poi.jar</a>,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可<p>本例使用java来读取excel的内容并展出出结果,代码如下:</p>  
  1. import java.io.BufferedInputStream;  
  2.   
  3. import java.io.File;  
  4.   
  5. import java.io.FileInputStream;  
  6.   
  7. import java.io.FileNotFoundException;  
  8.   
  9. import java.io.IOException;  
  10.   
  11. import java.text.DecimalFormat;  
  12.   
  13. import java.text.SimpleDateFormat;  
  14.   
  15. import java.util.ArrayList;  
  16.   
  17. import java.util.Arrays;  
  18.   
  19. import java.util.Date;  
  20.   
  21. import java.util.List;  
  22.   
  23.   
  24. import org.apache.poi.hssf.usermodel.HSSFCell;  
  25.   
  26. importorg.apache.poi.hssf.usermodel.HSSFDateUtil;  
  27.   
  28. import org.apache.poi.hssf.usermodel.HSSFRow;  
  29.   
  30. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  31.   
  32. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  33.   
  34. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  35.   
  36.   
  37. publicclass ExcelOperate {  
  38.   
  39.   
  40. publicstaticvoid main(String[] args)throws Exception {  
  41.   
  42. File file = new File("ExcelDemo.xls");  
  43.   
  44. String[][] result = getData(file, 1);  
  45.   
  46. int rowLength = result.length;  
  47.   
  48. for(int i=0;i<rowLength;i++) {  
  49.   
  50. for(int j=0;j<result[i].length;j++) {  
  51.   
  52. System.out.print(result[i][j]+"\t\t");  
  53.   
  54. }  
  55.   
  56. System.out.println();  
  57.   
  58. }  
  59.   
  60.   
  61. }  
  62.   
  63. /** 
  64.  
  65. *读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 
  66.  
  67. *@paramfile读取数据的源Excel 
  68.  
  69. *@paramignoreRows读取数据忽略的行数,比喻行头不需要读入忽略的行数为1 
  70.  
  71. *@return读出的Excel中数据的内容 
  72.  
  73. *@throwsFileNotFoundException 
  74.  
  75. *@throwsIOException 
  76.  
  77. */  
  78.   
  79. publicstatic String[][] getData(File file,int ignoreRows)  
  80.   
  81. throws FileNotFoundException, IOException {  
  82.   
  83. List<String[]> result = new ArrayList<String[]>();  
  84.   
  85. int rowSize = 0;  
  86.   
  87. BufferedInputStream in = new BufferedInputStream(new FileInputStream(  
  88.   
  89. file));  
  90.   
  91. // 打开HSSFWorkbook  
  92.   
  93. POIFSFileSystem fs = new POIFSFileSystem(in);  
  94.   
  95. HSSFWorkbook wb = new HSSFWorkbook(fs);  
  96.   
  97. HSSFCell cell = null;  
  98.   
  99. for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {  
  100.   
  101. HSSFSheet st = wb.getSheetAt(sheetIndex);  
  102.   
  103. // 第一行为标题,不取  
  104.   
  105. for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {  
  106.   
  107. HSSFRow row = st.getRow(rowIndex);  
  108.   
  109. if (row ==null) {  
  110.   
  111. continue;  
  112.   
  113. }  
  114.   
  115. int tempRowSize = row.getLastCellNum() + 1;  
  116.   
  117. if (tempRowSize > rowSize) {  
  118.   
  119. rowSize = tempRowSize;  
  120.   
  121. }  
  122.   
  123. String[] values = new String[rowSize];  
  124.   
  125. Arrays.fill(values, "");  
  126.   
  127. boolean hasValue =false;  
  128.   
  129. for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {  
  130.   
  131. String value = "";  
  132.   
  133. cell = row.getCell(columnIndex);  
  134.   
  135. if (cell !=null) {  
  136.   
  137. // 注意:一定要设成这个,否则可能会出现乱码  
  138.   
  139. cell.setEncoding(HSSFCell.ENCODING_UTF_16);  
  140.   
  141. switch (cell.getCellType()) {  
  142.   
  143. case HSSFCell.CELL_TYPE_STRING:  
  144.   
  145. value = cell.getStringCellValue();  
  146.   
  147. break;  
  148.   
  149. case HSSFCell.CELL_TYPE_NUMERIC:  
  150.   
  151. if (HSSFDateUtil.isCellDateFormatted(cell)) {  
  152.   
  153. Date date = cell.getDateCellValue();  
  154.   
  155. if (date !=null) {  
  156.   
  157. value = new SimpleDateFormat("yyyy-MM-dd")  
  158.   
  159. .format(date);  
  160.   
  161. else {  
  162.   
  163. value = "";  
  164.   
  165. }  
  166.   
  167. else {  
  168.   
  169. value = new DecimalFormat("0").format(cell  
  170.   
  171. .getNumericCellValue());  
  172.   
  173. }  
  174.   
  175. break;  
  176.   
  177. case HSSFCell.CELL_TYPE_FORMULA:  
  178.   
  179. // 导入时如果为公式生成的数据则无值  
  180.   
  181. if (!cell.getStringCellValue().equals("")) {  
  182.   
  183. value = cell.getStringCellValue();  
  184.   
  185. else {  
  186.   
  187. value = cell.getNumericCellValue() + "";  
  188.   
  189. }  
  190.   
  191. break;  
  192.   
  193. case HSSFCell.CELL_TYPE_BLANK:  
  194.   
  195. break;  
  196.   
  197. case HSSFCell.CELL_TYPE_ERROR:  
  198.   
  199. value = "";  
  200.   
  201. break;  
  202.   
  203. case HSSFCell.CELL_TYPE_BOOLEAN:  
  204.   
  205. value = (cell.getBooleanCellValue() == true ?"Y"  
  206.   
  207. "N");  
  208.   
  209. break;  
  210.   
  211. default:  
  212.   
  213. value = "";  
  214.   
  215. }  
  216.   
  217. }  
  218.   
  219. if (columnIndex == 0 && value.trim().equals("")) {  
  220.   
  221. break;  
  222.   
  223. }  
  224.   
  225. values[columnIndex] = rightTrim(value);  
  226.   
  227. hasValue = true;  
  228.   
  229. }  
  230.   
  231.   
  232. if (hasValue) {  
  233.   
  234. result.add(values);  
  235.   
  236. }  
  237.   
  238. }  
  239.   
  240. }  
  241.   
  242. in.close();  
  243.   
  244. String[][] returnArray = new String[result.size()][rowSize];  
  245.   
  246. for (int i = 0; i < returnArray.length; i++) {  
  247.   
  248. returnArray[i] = (String[]) result.get(i);  
  249.   
  250. }  
  251.   
  252. return returnArray;  
  253.   
  254. }  
  255.   
  256.   
  257. /** 
  258.  
  259. *去掉字符串右边的空格 
  260.  
  261. *@paramstr要处理的字符串 
  262.  
  263. *@return处理后的字符串 
  264.  
  265. */  
  266.   
  267. publicstatic String rightTrim(String str) {  
  268.   
  269. if (str ==null) {  
  270.   
  271. return"";  
  272.   
  273. }  
  274.   
  275. int length = str.length();  
  276.   
  277. for (int i = length - 1; i >= 0; i--) {  
  278.   
  279. if (str.charAt(i) != 0x20) {  
  280.   
  281. break;  
  282.   
  283. }  
  284.   
  285. length--;  
  286.   
  287. }  
  288.   
  289. return str.substring(0, length);  
  290.   
  291. }  
  292.   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值