几个excel小方法
public class ExcelUtils {
/**
* 创建一个Excel文件的方法
*
* @param sheets 一个保存页签名的excel文件地址
* @param column 一个保存列名的excel文件地址
* @param content 内容键值对 例:<sheet名,<列序号,内容集合>> (Map<String, Map<Integer, List<String>>>)
* @param outputStream 生成文件位置
* @return
*/
public static boolean newExcel(File sheets, File column, Map<String, Map<Integer, List<String>>> content, FileOutputStream outputStream) {
// 创建工作簿
XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
// 获取页名集合
List<String> sheetName = getColumn(sheets, 0, 0, true);
// 获取列名集合
List<String> columnName = ExcelUtils.getLine(column, 0, 0);
// 创建工作表
XSSFSheet xssfSheet;
// 创建行
XSSFRow xssfRow;
// 创建列,即单元格Cell
XSSFCell xssfCell;
for (String sn : sheetName) {
xssfSheet = xssfWorkbook.createSheet(sn);
// 建表头
xssfRow = xssfSheet.createRow(0);
for (int j = 0; j < columnName.size(); j++) {
// 创建单元格
xssfCell = xssfRow.createCell(j);
// 设置单元格内容
xssfCell.setCellValue(columnName.get(j));
}
// 这不必要 因为这里我的页名和我的文件名不一样
// nameT是我处理过的文件名 正常不需要nameT
String nameT = sn.split(" ")[0];
// 判断有没有对应名字的键
if (content.containsKey(nameT)){
Map<Integer, List<String>> contentT = content.get(nameT);
// i:同时也代表行号
for (int i = 0; i < contentT.get(0).size(); i++) {
xssfRow = xssfSheet.createRow(i+1);
Set<Integer> keys = contentT.keySet();
// 循环遍历 列序号
for (Integer key : keys) {
// 创建单元格
xssfCell = xssfRow.createCell(key);
// 获得对应列序号的第i行个数据
xssfCell.setCellValue(contentT.get(key).get(i));
}
}
}
}
//用输出流写到excel
try {
xssfWorkbook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
/**
* 获取excel行
*
* @param file 操作文件的地址
* @param sheet 第几页
* @param line 第几行
* @return
*/
private static List<String> getLine(File file, int sheet, int line) {
List<String> list = new ArrayList<String>();
XSSFWorkbook xwb;
try {
xwb = new XSSFWorkbook(new FileInputStream(file));
XSSFSheet xSheet = xwb.getSheetAt(sheet); //获取excel表的第几个sheet
XSSFRow row = xSheet.getRow(line);
// 获取column(第几列)的数据
for (int i = 0; i < row.getLastCellNum(); i++) {
list.add(row.getCell(i).toString());
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
/**
* 获取excel列
*
* @param file 操作文件的地址
* @param sheet 第几页
* @param column 第几列
* @param head 是否有表头
* @return
*/
private static List<String> getColumn(File file, int sheet, int column, boolean head) {
List<String> list = new ArrayList<String>();
XSSFWorkbook xwb;
try {
xwb = new XSSFWorkbook(new FileInputStream(file));
//获取excel表的第几个sheet
XSSFSheet xSheet = xwb.getSheetAt(sheet);
int i = 0;
if (head == true) {
i = 1;
}
for (; i <= xSheet.getLastRowNum(); i++) {
// 跳过空行(这行为空执行下次循环)
if (xSheet.getRow(i) == null) {
continue;
}
// 获取column(第几列)的数据
list.add((xSheet.getRow(i)).getCell(column).toString());
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
}