51Testing软件测试论坛
标题:
使用Apache的POI将内容写入Excel
[打印本页]
作者:
元芳你怎么看
时间:
2018-8-7 17:12
标题:
使用Apache的POI将内容写入Excel
package com.excel.poi.apache;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.plaf.synth.Region;
import java.awt.Color;
import java.awt.color.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.WorkbookUtil;
import org.apache.poi.openxml4j.opc.*;
public class WriteExcelTools {
// public String writepath = ReadExcelTools.readpath;
// public static XSSFWorkbook writeworkbook =ReadExcelTools.readFormula;
// public static Sheet writesheet = null;
//
// 将浮点数据写入指定单元格
public static void writeAppointCell(XSSFWorkbook wb, int sheetNum, int rowNum, int cellNum, double cellContent) {
XSSFSheet sheet = wb.getSheetAt(sheetNum);
// System.out.println(sheet);
XSSFRow row = sheet.getRow(rowNum);
// System.out.println(rowNum);
// System.out.println(row);
// System.out.println(cellNum);
XSSFCell cell = row.getCell(cellNum);
// System.out.println(cell);
cell.setCellValue(cellContent);
}
// 按行写入数据
public static void writeLineCel(XSSFWorkbook wb, int sheetNum, int rowNum, ArrayList<String> list) {
XSSFSheet sheet = wb.getSheetAt(sheetNum);
XSSFRow row = sheet.createRow(rowNum);
for (int i = 0; i < list.size(); i++) {
XSSFCell cell = row.createCell(i);
cell.setCellValue(list.get(i));
}
}
//复制sheet页
@SuppressWarnings("deprecation")
public static void copySheet(XSSFWorkbook wb, XSSFSheet fromsheet, XSSFSheet newSheet, int firstrow, int lasttrow) {
// 复制一个单元格样式到新建单元格
if ((firstrow == -1) || (lasttrow == -1) || lasttrow < firstrow) {
return;
}
// // 复制合并的单元格
// Region region = null;
// for (int i = 0; i < fromsheet.getNumMergedRegions(); i++) {
// region = fromsheet.getMergedRegion(i);
// if ((region.getRowFrom() >= firstrow) && (region.getRowTo() <= lasttrow)) {
// newSheet.addMergedRegion(region);
// }
// }
XSSFRow fromRow = null;
XSSFRow newRow = null;
XSSFCell newCell = null;
XSSFCell fromCell = null;
// 设置列宽
for (int i = firstrow; i < lasttrow+1; i++) {
fromRow = fromsheet.getRow(i);
if (fromRow != null) {
for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
int colnum = fromsheet.getColumnWidth((short) j);
if (colnum > 100) {
newSheet.setColumnWidth((short) j, (short) colnum);
}
if (colnum == 0) {
newSheet.setColumnHidden((short) j, true);
} else {
newSheet.setColumnHidden((short) j, false);
}
}
break;
}
}
// 复制行并填充数据
for (int i = 0; i < lasttrow+1; i++) {
fromRow = fromsheet.getRow(i);
if (fromRow == null) {
continue;
}
newRow = newSheet.createRow(i - firstrow);
newRow.setHeight(fromRow.getHeight());
int firstCellNum = fromRow.getFirstCellNum();
int physicalNumberOfCells =fromRow.getPhysicalNumberOfCells();
// System.out.println(physicalNumberOfCells);
for (int j = firstCellNum;j<physicalNumberOfCells;j++){
fromCell = fromRow.getCell(j);
if(fromCell == null){
continue;
}
newCell = newRow.createCell(j);
newCell.setCellStyle(fromCell.getCellStyle());
int cType = fromCell.getCellType();
newCell.setCellType(cType);
switch(cType){
case XSSFCell.CELL_TYPE_STRING:newCell.setCellValue(fromCell.getRichStringCellValue());break;
case XSSFCell.CELL_TYPE_NUMERIC:newCell.setCellValue(fromCell.getNumericCellValue());break;
case XSSFCell.CELL_TYPE_FORMULA:newCell.setCellValue(fromCell.getCellFormula());break;
case XSSFCell.CELL_TYPE_BOOLEAN:newCell.setCellValue(fromCell.getBooleanCellValue());break;
case XSSFCell.CELL_TYPE_ERROR:newCell.setCellValue(fromCell.getErrorCellValue());break;
default:newCell.setCellValue(fromCell.getRichStringCellValue());break;
}
}
}
}
//比对两个单元格的数值是否相等;
public static void compareCell(XSSFWorkbook wb, XSSFCell cellF, XSSFCell cellP) {
double fvalue = Double.parseDouble(cellF.getStringCellValue());
double pvalue = Double.parseDouble(cellP.getStringCellValue());
XSSFCellStyle style = wb.createCellStyle();
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);;
style.setFillForegroundColor(new XSSFColor(Color.RED));;
if (fvalue != pvalue) {
System.out.println(cellF+"*****"+cellP);
cellF.setCellStyle(style);
cellP.setCellStyle(style);
}
}
public static void main(String[] args) {
XSSFWorkbook wb = new XSSFWorkbook();
try {
wb = ReadExcelTools.readFile("D:/Practice/jieguodemo.xlsx");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
XSSFCell cellF = wb.getSheetAt(1).getRow(5).getCell(5);
System.out.println(cellF);
XSSFCell cellP = wb.getSheetAt(1).getRow(9).getCell(5);
System.out.println(cellP);
compareCell(wb,cellF,cellP);
// writeAppointCell(wb, 0, 14, 2, 9999);
FileOutputStream os;
try {
os = new FileOutputStream("D:/Practice/jieguodemo.xlsx");
wb.write(os);
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2