我是靠谱客的博主 老迟到信封,最近开发中收集的这篇文章主要介绍java写入excel数据_Java-写入数据到Excel文件中_Demo(转载+完善),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

临时要帮同学一个忙,就是提供一个界面,然后输入病人信息后,点击即可写入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(转载+完善)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部