先看源码
1. package readExcel; 2. 3. import java.io.FileInputStream; 4. import java.io.InputStream; 5. import java.util.ArrayList; 6. import java.util.Hashtable; 7. 8. import jxl.Cell; 9. import jxl.Sheet; 10. import jxl.Workbook; 11. 12. import java.io.File; 13. import jxl.write.Label; 14. import jxl.write.WritableSheet; 15. import jxl.write.WritableWorkbook; 16. 17. 18. public class ReadExcel { 19. public static void main(String[] args) { 20. try { 21. // 1、构造excel文件输入流对象 22. //这里的路径要换掉,换成自己的表格名字 23. String Path = "Example/NeedRead/BMUS.xls"; 24. InputStream is = new FileInputStream(Path); 25. // 2、声明工作簿对象 26. Workbook rwb = Workbook.getWorkbook(is); 27. 28. // 3、获得工作簿的个数,对应于一个excel中的工作表个数 29. rwb.getNumberOfSheets(); 30. 31. // 获取excel中所有的表 32. // Sheet[] sheets = rwb.getSheets(); 33. // 获取表的个数 34. // Integer pages = sheets.length; 35. // 获取对应表,i为循环 36. // Sheet sheet = sheets[i]; 37. 38. // 使用索引形式获取第一个工作表。 39. // Sheet oFirstSheet = rwb.getSheet(0);// 40. 41. // 也可以使用rwb.getSheet(sheetName);其中sheetName表示的是工作表的名称 42. Sheet oFirstSheet = rwb.getSheet("第一个表"); 43. 44. // System.out.println("工作表名称:" + oFirstSheet.getName()); 45. int rows = oFirstSheet.getRows();// 获取工作表中的总行数 46. int columns = oFirstSheet.getColumns();// 获取工作表中的总列数 47. 48. System.out.println("*****输出第一个表的总行数*****" + rows); 49. System.out.println("*****输出第一个表的总列数*****" + columns); 50. 51. /** 52. * 按照每一列读取数据,将一列中的数据存入数组 53. * 54. */ 55. 56. // 用于读取直接从表中读取的数据 57. Hashtable<Integer, ArrayList<String>> dataStr = new Hashtable<>(); 58. 59. // 列的循环 60. for (int i = 0; i < columns; i++) { 61. 62. // 将列中的数据存入此处,由于不能确定每一列中的具体行数,先使用ArrayList 63. // 此处需注意的是已经确认了每一列中的数据是连续的,没有相隔一行或几行的数据 64. ArrayList<String> cdata = new ArrayList<String>(); 65. 66. // 行的循环,从第一个一直读取到整个表的最大行数,当遇到空值时跳出循环 67. for (int j = 0; j < rows; j++) { 68. 69. // 将表中一个方格中的“东西”转换为Cell这个类,这个类也只有一个值 70. // 需要注意的是这里的getCell方法的参数,第一个是指定第几列,第二个参数才是指定第几行 71. // System.out.println("这个是i列 "+i+" 这个是j行 "+j); 72. Cell oCell = oFirstSheet.getCell(i, j); 73. 74. // 将Cell类型的数据转换为String类型的数据。Cell只提供转换成String的方法,无法直接转换成Double、int数据 75. String oCellStr = oCell.getContents(); 76. 77. // System.out.println("这个是每一框中的数据 " +oCellStr); 78. 79. // 如果有数据,则存入数据,如果没有,则跳出这个循环 80. if (oCellStr != "") { 81. cdata.add(oCellStr); 82. } else { 83. // System.out.println("---------------------------这个是空值了-----------------------"); 84. break; 85. } 86. 87. } 88. 89. // 存入每一列的数据 90. dataStr.put(i, cdata); 91. 92. } 93. 94. /** 95. * 进行简单的操作,即把每一个值加上50 96. */ 97. // 用于存储经过运算之后的值 98. Hashtable<Integer, ArrayList<Integer>> dataInt = new Hashtable<>(); 99. 100. // 列的循环 101. for (int i = 0; i < dataStr.size(); i++) { 102. 103. // 用于存储每一列的值 104. ArrayList<Integer> cDataInt = new ArrayList<>(); 105. // 行的循环 106. for (int j = 0; j < dataStr.get(i).size(); j++) { 107. // 每一个方框中的值,此处读取为字符串类型 108. String daStr = dataStr.get(i).get(j); 109. // 将String转换为Integer类型 110. int daInt = Integer.parseInt(daStr); 111. 112. // 加上50 113. daInt += 50; 114. // 存入这一列的数据中 115. cDataInt.add(daInt); 116. } 117. // 将这一列存入总数据中 118. dataInt.put(i, cDataInt); 119. } 120. 121. /** 122. * 写入新的Excel表 123. * 124. * 125. * */ 126. /* 把Excel表输出的位置 */ 127. String targetpath = "Example/NeedRead/oneCopy.xls"; 128. 129. 130. // 1、创建工作簿(WritableWorkbook)对象,打开excel文件,若文件不存在,则创建文件,但注意必须保证文件夹存在,此处无法创建新文件夹 131. WritableWorkbook writeBook = Workbook.createWorkbook(new File(targetpath)); 132. // 2、新建工作表(sheet)对象,并声明其属于第几页 133. WritableSheet firstSheet = writeBook.createSheet("第一种复制的表", 0);// 第一个参数为工作簿的名称,第二个参数为页数 134. // WritableSheet secondSheet = writeBook.createSheet("第二个工作簿", 0); 135. 136. /** 137. * 循环输出 138. */ 139. 140. // 列的循环 141. for (int i = 0; i < dataInt.size(); i++) { 142. 143. // 行的循环 144. for (int j = 0; j < dataInt.get(i).size(); j++) { 145. 146. // 每一个方框中的值,此处读取为Integer 147. int data = dataInt.get(i).get(j); 148. 149. // 3、创建单元格(Label)对象 150. // 第一个参数指定单元格的列数、第二个参数指定单元格的行数,第三个指定写的字符串内容 151. Label label = new Label(i, j, String.valueOf(data)); 152. // 写入数据 153. firstSheet.addCell(label); 154. 155. } 156. 157. } 158. // 4、打开流,开始写文件 159. writeBook.write(); 160. //关闭读取和写入的工作流 161. is.close(); 162. writeBook.close(); 163. } catch (Exception e) { 164. e.printStackTrace(); 165. 166. } 167. 168. System.out.println("程序运行结束"); 169. } 170. }
记住一定要把jxl包放在lib列表下
然后右键jxl包,Build Path》》》Configure Build Path,把jxl包添加一下
添加之后就会出现这个
如果代码出现
1. at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116) 2. at jxl.read.biff.File.<init>(File.java:127) 3. at jxl.Workbook.getWorkbook(Workbook.java:268) 4. at jxl.Workbook.getWorkbook(Workbook.java:253) 5. at readExcel.ReadExcel.main(ReadExcel.java:25)
那是因为你的Excel表格
1:版本问题,现在jxl包好像只能弄03的还是哪个来着
2:表格出现错误
3:后缀名一定是xls,不能是xlsx。