jxl操作excel(5)

2019-02-15 13:06

66. public static void exportExcelByMap(List> objList, String title, String strTitle, String strBody, String outputPath) {

67. // 创建工作簿(Excel文件)

68. HSSFWorkbook workbook = new HSSFWorkbook(); 69.

70. // 创建Excel工作簿的第一个Sheet页

71. HSSFSheet sheet = workbook.createSheet(title); 72.

73. // 创建Sheet页的文件头(第一行) 74. createTitle(sheet, strTitle); 75.

76. // 创建Sheet页的文件体(后续行)

77. String[] strArray = strBody.split(\

78. for(int objIndex = 0; objIndex < objList.size(); objIndex++) {

79. Map map = objList.get(objIndex);

80. HSSFRow row = sheet.createRow(objIndex + 1); 81. for(int i = 0; i < strArray.length; i++) { 82. HSSFCell cell = row.createCell(i);

83. cell.setCellType(HSSFCell.CELL_TYPE_STRING); 84. cell.setCellValue(map.get(strArray[i]).toString());

85. } 86. } 87.

88. // 保存Excel文件

89. saveExcelFile(workbook, outputPath); 90. } 91. 92. /**

93. * 导出Excle文档 94. *

95. * @param objList : Excel数据源

96. * @param objClass : Excel数据源中的数据类型 97. * @param title : 新建Sheet的名称 98. * ex: title = \员工表\99. * @param strTitle : Sheet各列的标题(第一行各列的名称) 100. * ex: strTitle = \员工代码,员工姓名,性别,出生日期,籍贯,所属机构,联系电话,电子邮件,助记码\101. * @param strBody : Sheet各列的取值方法名(各列的值在objClass中get方法名称)

102. * ex: strBody = \getBirthday,getHomeplace.getName,getOrg.getShortName,getContactTel,getEmail,getZjm\

103. * @param outputPath: Excel文档保存路径 104. */

105. public static void exportExcelByObject(List objList, Class objClass, String title, String strTitle, String strBody, String outputPath) {

106. // 初始化工作簿

107. HSSFWorkbook workbook = initWorkbook(objList, objClass, title, strTitle, strBody); 108. // 保存Excel文件

109. saveExcelFile(workbook, outputPath); 110. } 111. /**

112. * 初始化工作簿 113. *

114. * @param objList : Excel数据源

115. * @param objClass : Excel数据源中的数据类型 116. * @param title : 新建Sheet的名称 117. * @param strTitle : Sheet各列的标题(第一行各列的名称)

118. * @param strBody : Sheet各列的取值方法名(各列的值在objClass中get方法名称) 119. */

120. private static HSSFWorkbook initWorkbook(List objList, Class objClass, String title, String strTitle, String strBody){

121. // 创建工作簿(Excel文件)

122. HSSFWorkbook workbook = new HSSFWorkbook(); 123.

124. // 创建Excel工作簿的第一个Sheet页

125. HSSFSheet sheet = workbook.createSheet(title); 126.

127. // 创建Sheet页的文件头(第一行) 128. createTitle(sheet, strTitle); 129.

130. // 创建Sheet页的文件体(后续行)

131. createBody(objList, objClass, sheet, strBody); 132.

133. return workbook; 134. } 135. 136. /**

137. * 创建Excel当前sheet页的头信息 138. *

139. * @param sheet : Excel工作簿的一个sheet

140. * @param strTitle : sheet头信息列表(sheet第一行各列值)

141. */

142. private static void createTitle(HSSFSheet sheet, String strTitle){

143. HSSFRow row = sheet.createRow(0); // 创建该页的一行

144. HSSFCell cell = null; 145.

146. String[] strArray = strTitle.split(\147.

148. for(int i = 0; i < strArray.length; i++) {

149. cell = row.createCell(i); // 创建该行的一列 150. cell.setCellType(HSSFCell.CELL_TYPE_STRING); 151. cell.setCellValue(strArray[i]); 152. } 153. 154. } 155. 156. /**

157. * 创建Excel当前sheet页的体信息 158. *

159. * @param objList : Excel数据源

160. * @param objClass : Excel数据源中的数据类型 161. * @param sheet : Excel工作簿的sheet页 162. * @param strBody : Sheet各列的取值方法名(各列的值在objClass中get方法名称) 163. */

164. private static void createBody(List objList, Class objClass, HSSFSheet sheet, String strBody){

165. String[] targetMethod = strBody.split(\166. Method[] ms = objClass.getMethods(); 167.

168. // 循环objList对象列表(生成sheet的行)

169. for(int objIndex = 0; objIndex < objList.size(); objIndex++){

170. Object obj = objList.get(objIndex);

171. HSSFRow row = sheet.createRow(objIndex + 1); 172. // 循环strBody目标方法数组(生成sheet的列) 173. for(int strIndex = 0; strIndex < targetMethod.length; strIndex++) {

174. String targetMethodName = targetMethod[strIndex];

175. // 循环ms方法数组,找到目标方法(strBody中指定的方法)并调用

176. for(int i = 0; i < ms.length; i++) { 177. Method srcMethod = ms[i];

178. int len = targetMethodName.indexOf(\) < 0 ? targetMethodName.length() : targetMethodName.indexOf(\\

179. if (srcMethod.getName().equals(targetMethodName.substring(0, len))) {

180. HSSFCell cell = row.createCell(strIndex);

181. cell.setCellType(HSSFCell.CELL_TYPE_STRING);

182. try {

183. // 如果方法返回一个引用类型的值

184. if (targetMethodName.contains(\

185. cell.setCellValue(referenceInvoke(targetMethodName, obj));

186. // 如果方法返回一个普通属性 187. } else {

188. cell.setCellValue((srcMethod.invoke(obj)).toString());

189. }

190. } catch (Exception e) { 191. e.printStackTrace(); 192. } 193. } 194. } 195. } 196. } 197. 198. } 199. 200. /**

201. * 方法返回的是一个对象的引用(如:getHomeplace.getName类型的方法序列)

202. * 按方法序列逐层调用直到最后放回基本类型的值 203. *

204. * @param targetMethod : obj对象所包含的方法列 205. * @param obj : 待处理的对象

206. * @return

207. */ //getHomeplace.getName emp(obj)

208. private static String referenceInvoke(String targetMethod, Object obj) {

209. // 截取方法序列的第一个方法(即截取属于obj对象的方法:getHomeplace())

210. String refMethod = targetMethod.substring(0, targetMethod.indexOf(\

211. // 获得后续方法序列(getName())

212. targetMethod = targetMethod.substring(targetMethod.indexOf(\213. try {

214. // 获得第一个方法的执行结果(即obj方法执行的结果:obj.getHomeplace())

215. obj = obj.getClass().getMethod(refMethod).invoke(obj);

216. } catch (Exception e) { 217. e.printStackTrace(); 218. } 219.

220. // 如果方法序列没到最后一节

221. if (targetMethod.contains(\

222. return referenceInvoke(targetMethod, obj); 223. // 如果方法序列到达最后一节 224. } else { 225. try {

226. // 通过obj对象获得该方法链的最后一个方法并调用

227. Method tarMethod = obj.getClass().getMethod(targetMethod);

228. return tarMethod.invoke(obj).toString(); 229. } catch (Exception e) { 230. e.printStackTrace();

231. throw new RuntimeException(e); 232. } 233. } 234. 235. } 236. 237. /**

238. * 保存Excel文件 239. *

240. * @param workbook : Excel工作簿


jxl操作excel(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电阻炉温度控制系统毕业设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: