概述
临时要帮同学一个忙,就是提供一个界面,然后输入病人信息后,点击即可写入Excell表格中。简化了传统的手工录入Excell的操作,毕竟面对大量的病历图片,眼睛还是有点干涩的哈!小萌新毕竟没实际搞过,不过临时需要就网上找个来,然后自己做个界面来调用下相关方法,然后根据需求改造下应该就能满足了。记录下,也算是一种了解。
小萌新网上找了一个案例,不过案例需要一些个jar包,不是jdk自带的,所以还是需要花点时间把jar包什么的准备准备,然后就可以运行了。
然后在Eclipse里面的话,下面图片中的红框的引入是报错的,因为没有jar包:
被×掉的日志的可以先不管哈!因为我们不打日志,也不想打,哈哈~~~~为了快点跑起来赛!
都可以下载哈。然后看到如下相关jar包:
然后我们只需要红框的就可以操作Excel了。因为一开始我以为不需要文件夹的,但是不是,运行要报缺各种类。 索性一次性都搞下就完事了,如下:
关于jar包,有相关的介绍说明,以及缺少jar包的相关的问题:
注意: guava-18.0.jar guava-18.0.jar包 官方免费版 是google的jar包,关于操作map的。小萌新后面做可视化的时候,试着去修改下网友代码,不采用这个jar包的方法,换个方式应该也是可以的。I think...
最后还是附上相关的代码:
package com.hl.caseness;
import com.google.common.collect.Maps;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.*;
public class WriterExcelUtil {
/**
* 数据写入Excel文件
*
* @param path 文件路径,包含文件全名,例如:D://demo.xls
* @param name sheet名称
* @param titles 行标题列
* @param values 数据集合,key为标题,value为数据
* @return TrueFalse
*/
public static boolean writerExcel(String path, String name, List titles, List> values) {
// LOGGER.info("path : {}", path);
String style = path.substring(path.lastIndexOf("."), path.length()).toUpperCase(); // 从文件路径中获取文件的类型
return generateWorkbook(path, name, style, titles, values, true, true);
}
/**
* 将数据写入指定path下的Excel文件中
*
* @param path 文件存储路径
* @param name sheet名
* @param style Excel类型
* @param titles 标题串
* @param values 内容集
* @param bShowId 是否添加id列
* @param bAppend 是否追加的形式添加
* @return TrueFalse
*/
private static boolean generateWorkbook(String path, String name, String style, List titles,
List> _values, boolean bShowId, boolean bAppend) {
// LOGGER.info("file style : {}", style);
Workbook workbook = null;
File fileF = new File(path);
if (fileF.exists()) {
if (bAppend) {
FileInputStream fs = null;
try {
fs = new FileInputStream(path); // 获取D://demo.xls
if ("XLS".equals(style.toUpperCase())) {
workbook = new HSSFWorkbook(fs);
} else {
workbook = new XSSFWorkbook(fs);
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (null != fs) {
try {
fs.close();
} catch (IOException e) {
}
fs = null;
}
}
} else {
fileF.delete();
}
}
/// < 未找到工作表格时重新创建新的工作表格
if (null == workbook) {
if ("XLS".equals(style.toUpperCase())) {
workbook = new HSSFWorkbook();
} else {
workbook = new XSSFWorkbook();
}
}
// 生成一个表格
Sheet sheet = null;
/// < 文件存在的情况下 获取工作表格
int index = 0; // 行号
/// < 追加的情况下去尝试获取从第几行追加
if (fileF.exists() && bAppend) {
sheet = workbook.getSheet(name);
if (null != sheet) {
index = sheet.getLastRowNum();
}
}
/// < 如果不存在工作表格,则创建一个
if (null == sheet) {
if (null == name || "".equals(name)) {
sheet = workbook.createSheet(); // name 为空则使用默认值
} else {
sheet = workbook.createSheet(name);
}
}
/// < 增加Id处理
List> valuesTemp = _values;
if (bShowId && !titles.contains("id")) {
/// < 标题添加
titles.add(0, "id");
/// < 字段添加
for (int i = 0, j = index; i < _values.size(); i++, j++) {
_values.get(i).put("id", j + 1D);
}
}
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 15);
// 生成样式
Map styles = createStyles(workbook);
/*
* 创建标题行
*/
Row row = sheet.createRow(0);
// 存储标题在Excel文件中的序号
Map titleOrder = Maps.newHashMap();
for (int i = 0; i < titles.size(); i++) {
Cell cell = row.createCell(i);
cell.setCellStyle(styles.get("header"));
String title = titles.get(i);
cell.setCellValue(title);
titleOrder.put(title, i);
}
/*
* 写入正文
*/
Iterator> iterator = valuesTemp.iterator();
// int index = 0; // 行号
while (iterator.hasNext()) {
index++; // 出去标题行,从第一行开始写
row = sheet.createRow(index);
Map value = iterator.next();
for (Map.Entry map : value.entrySet()) {
// 获取列名
String title = map.getKey();
// 根据列名获取序号
int i = titleOrder.get(title);
// 在指定序号处创建cell
Cell cell = row.createCell(i);
// 设置cell的样式
if (index % 2 == 1) {
cell.setCellStyle(styles.get("cellA"));
} else {
cell.setCellStyle(styles.get("cellB"));
}
// 获取列的值
Object object = map.getValue();
// 判断object的类型
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (object instanceof Double) {
cell.setCellValue((Double) object);
} else if (object instanceof Date) {
String time = simpleDateFormat.format((Date) object);
cell.setCellValue(time);
} else if (object instanceof Calendar) {
Calendar calendar = (Calendar) object;
String time = simpleDateFormat.format(calendar.getTime());
cell.setCellValue(time);
} else if (object instanceof Boolean) {
cell.setCellValue((Boolean) object);
} else {
cell.setCellValue(object.toString());
}
}
}
/*
* 写入到文件中
*/
boolean isCorrect = false;
try {
File file = new File(path);
OutputStream outputStream = new FileOutputStream(file);
workbook.write(outputStream);
outputStream.close();
isCorrect = true;
} catch (IOException e) {
isCorrect = false;
// LOGGER.error("write Excel file error : {}", e.getMessage());
}
try {
workbook.close();
} catch (IOException e) {
isCorrect = false;
// LOGGER.error("workbook closed error : {}", e.getMessage());
}
return isCorrect;
}
/**
* Create a library of cell styles
*/
/**
* @param wb
* @return
*/
private static Map createStyles(Workbook wb) {
Map styles = Maps.newHashMap();
// 标题样式
CellStyle titleStyle = wb.createCellStyle();
titleStyle.setAlignment(HorizontalAlignment.CENTER); // 水平对齐
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直对齐
titleStyle.setLocked(true); // 样式锁定
titleStyle.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
Font titleFont = wb.createFont();
titleFont.setFontHeightInPoints((short) 16);
titleFont.setBold(true);
titleFont.setFontName("微软雅黑");
titleStyle.setFont(titleFont);
styles.put("title", titleStyle);
// 文件头样式
CellStyle headerStyle = wb.createCellStyle();
headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex()); // 前景色
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 颜色填充方式
headerStyle.setWrapText(true);
headerStyle.setBorderRight(BorderStyle.THIN); // 设置边界
headerStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
Font headerFont = wb.createFont();
headerFont.setFontHeightInPoints((short) 12);
headerFont.setColor(IndexedColors.WHITE.getIndex());
titleFont.setFontName("微软雅黑");
headerStyle.setFont(headerFont);
styles.put("header", headerStyle);
Font cellStyleFont = wb.createFont();
cellStyleFont.setFontHeightInPoints((short) 12);
cellStyleFont.setColor(IndexedColors.BLUE_GREY.getIndex());
cellStyleFont.setFontName("微软雅黑");
// 正文样式A
CellStyle cellStyleA = wb.createCellStyle();
cellStyleA.setAlignment(HorizontalAlignment.CENTER); // 居中设置
cellStyleA.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleA.setWrapText(true);
cellStyleA.setBorderRight(BorderStyle.THIN);
cellStyleA.setRightBorderColor(IndexedColors.BLACK.getIndex());
cellStyleA.setBorderLeft(BorderStyle.THIN);
cellStyleA.setLeftBorderColor(IndexedColors.BLACK.getIndex());
cellStyleA.setBorderTop(BorderStyle.THIN);
cellStyleA.setTopBorderColor(IndexedColors.BLACK.getIndex());
cellStyleA.setBorderBottom(BorderStyle.THIN);
cellStyleA.setBottomBorderColor(IndexedColors.BLACK.getIndex());
cellStyleA.setFont(cellStyleFont);
styles.put("cellA", cellStyleA);
// 正文样式B:添加前景色为浅黄色
CellStyle cellStyleB = wb.createCellStyle();
cellStyleB.setAlignment(HorizontalAlignment.CENTER);
cellStyleB.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleB.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
cellStyleB.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyleB.setWrapText(true);
cellStyleB.setBorderRight(BorderStyle.THIN);
cellStyleB.setRightBorderColor(IndexedColors.BLACK.getIndex());
cellStyleB.setBorderLeft(BorderStyle.THIN);
cellStyleB.setLeftBorderColor(IndexedColors.BLACK.getIndex());
cellStyleB.setBorderTop(BorderStyle.THIN);
cellStyleB.setTopBorderColor(IndexedColors.BLACK.getIndex());
cellStyleB.setBorderBottom(BorderStyle.THIN);
cellStyleB.setBottomBorderColor(IndexedColors.BLACK.getIndex());
cellStyleB.setFont(cellStyleFont);
styles.put("cellB", cellStyleB);
return styles;
}
}
package com.hl.caseness;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class Home {
public static void main(String[] args) {
// TODO Auto-generated method stub
String path = "D://demo.xls";
String name = "test";
List titles =Lists.newArrayList();
titles.add("id");
titles.add("姓名");
titles.add("age");
titles.add("birthday");
titles.add("gender");
titles.add("date");
List> values = Lists.newArrayList();
for (int i = 0; i < 10; i++) {
Map map = Maps.newHashMap();
map.put("id", i + 1D);
map.put("姓名", "test_" + i);
map.put("age", i * 1.5);
map.put("gender", "man");
map.put("birthday", new Date());
map.put("date", Calendar.getInstance());
values.add(map);
}
System.out.println(WriterExcelUtil.writerExcel(path, name, titles, values));
}
}
感谢网友的分享,如果粘贴代码有影响作者心情,随时联系我,我随时删除哈! 小萌新后面会基于这个工具类做一个可视化的界面,然后给同学使用哈! 谢谢。。。
我想应该有开源的这种,不过小萌新觉得了解下也还不错....
最后
以上就是老迟到信封为你收集整理的java写入excel数据_Java-写入数据到Excel文件中_Demo(转载+完善)的全部内容,希望文章能够帮你解决java写入excel数据_Java-写入数据到Excel文件中_Demo(转载+完善)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复