这个是官方网站上给出的一个,我做了一些修改,
程序中有说明,如有问题,请大家指出
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
/**
*
* 这个不是HSSF FILE的大部分,只是一个功能测试程序,这个程序
*
* 包含简单API功能,对于初学者可能有所帮助
*
* @see #main
* @author Andrew Oliver (acoliver at apache dot org)
*/
public final class HSSFReadWrite
{
/**
*
* 根据传入的文件名,读取为HSSFWrokbook
*/
private static HSSFWorkbook readFile(String filename) throws IOException
{
return new HSSFWorkbook(new FileInputStream(filename));
}
/**
*
* 给定文件名,创建一个简单的sheet
*/
private static void testCreateSampleSheet(String outputFilename)
throws IOException
{
int rownum;
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet s = wb.createSheet();
HSSFCellStyle cs = wb.createCellStyle();
HSSFCellStyle cs2 = wb.createCellStyle();
HSSFCellStyle cs3 = wb.createCellStyle();
HSSFFont f = wb.createFont();
HSSFFont f2 = wb.createFont();
f.setFontHeightInPoints((short) 12);
f.setColor((short) 0xA);
f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
f2.setFontHeightInPoints((short) 10);
f2.setColor((short) 0xf);
f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
cs.setFont(f);
cs.setDataFormat(HSSFDataFormat
.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cs2.setFillPattern((short) 1); // fill w fg
cs2.setFillForegroundColor((short) 0xA);
cs2.setFont(f2);
wb.setSheetName(0, "HSSF Test");
for (rownum = 0; rownum < 300; rownum++)
{
HSSFRow r = s.createRow(rownum);
if ((rownum % 2) == 0)
{
r.setHeight((short) 0x249);
}
for (int cellnum = 0; cellnum < 50; cellnum += 2)
{
HSSFCell c = r.createCell(cellnum);
c.setCellValue(rownum
* 10000
+ cellnum
+ (((double) rownum / 1000) + ((double) cellnum / 10000)));
if ((rownum % 2) == 0)
{
c.setCellStyle(cs);
}
c = r.createCell(cellnum + 1);
c.setCellValue(new HSSFRichTextString("TEST"));
s.setColumnWidth(cellnum + 1, (int) (50 * 8 / 0.05));
if ((rownum % 2) == 0)
{
c.setCellStyle(cs2);
}
}
}
// 在底部画黑线
rownum++;
rownum++;
HSSFRow r = s.createRow(rownum);
cs3.setBorderBottom(HSSFCellStyle.BORDER_THICK);
for (int cellnum = 0; cellnum < 50; cellnum++)
{
HSSFCell c = r.createCell(cellnum);
c.setCellStyle(cs3);
}
s.addMergedRegion(new CellRangeAddress(0, 3, 0, 3));
s.addMergedRegion(new CellRangeAddress(100, 110, 100, 110));
FileOutputStream out = new FileOutputStream(outputFilename);
wb.write(out);
out.close();
}
/**
* main 方法
*
* 1. 给定一个参数作为Excel文件名,在操作台输出 <br/>
*
* 2. 给定两个参数,第二个参数为write时,根据第一个参数创建一个相应名字的Excel,
* 第二个参数不为Write时,把第一个参数的Excel复制到第二个参数的Excel <br/>
*
* 3. 给定三个参数,当第三个参数为 modify1 时,将第一个参数对应的Excel拷贝到<br/>
* 参数2对应的Excel中,再进行编辑 <br/>
*
*/
public static void main(String[] args)
{
if (args.length < 1)
{
System.err.println("At least one argument expected");
return;
}
System.out.println(args.length);
String fileName = args[0];
try
{
// 有两个参数的时候
if (args.length < 2)
{
// 读取表
HSSFWorkbook wb = HSSFReadWrite.readFile(fileName);
System.out.println("Data dump:\n");
// 遍历所有的sheet
for (int k = 0; k < wb.getNumberOfSheets(); k++)
{
// 获取当前的sheet
HSSFSheet sheet = wb.getSheetAt(k);
// 获取相应的sheet的行数
int rows = sheet.getPhysicalNumberOfRows();
System.out.println("Sheet " + k + " \""
+ wb.getSheetName(k) + "\" has " + rows
+ " row(s).");
// 遍历每一行的数据
// for (int r = 0; r < rows; r++) {
// //获取行
// HSSFRow row = sheet.getRow(r);
// if (row == null) {
// continue;
// }
//
// //获取当前行的列数
//
// int cells = row.getPhysicalNumberOfCells();
// System.out.println("\nROW " + row.getRowNum() + " has " +
// cells
// + " cell(s).");
// for (int c = 0; c < cells; c++) {
// HSSFCell cell = row.getCell(c);
// String value = null;
for (Row row : sheet)
{
int cells = row.getLastCellNum();
System.out.println("\nROW " + row.getRowNum() + " has "
+ cells + " cell(s).");
for (Cell cell : row)
{
String value = null;
if (cell == null)
System.out.print("-------null\t");
else if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK)
System.out.print("空");
else
{
switch (cell.getCellType())
{
case HSSFCell.CELL_TYPE_FORMULA:
value = "FORMULA value="
+ cell.getCellFormula();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value = "NUMERIC value="
+ cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_STRING:
value = "STRING value="
+ cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
value = "STRING value= NULL";
break;
default:
value = "STRING value= NULL";
}
}
System.out
.println("CELL col="
+ cell.getColumnIndex() + " VALUE="
+ value);
}
}
}
}
else if (args.length == 2)
{
if (args[1].toLowerCase().equals("write"))
{
System.out.println("Write mode");
long time = System.currentTimeMillis();
HSSFReadWrite.testCreateSampleSheet(fileName);
System.out.println("" + (System.currentTimeMillis() - time)
+ " ms generation time");
}
else
{
System.out.println("readwrite test");
HSSFWorkbook wb = HSSFReadWrite.readFile(fileName);
//指定文件输出对象文件名
FileOutputStream stream = new FileOutputStream(args[1]);
//直接写
wb.write(stream);
stream.close();
}
}
else if (args.length == 3
&& args[2].toLowerCase().equals("modify1"))
{
HSSFWorkbook wb = HSSFReadWrite.readFile(fileName);
FileOutputStream stream = new FileOutputStream(args[1]);
HSSFSheet sheet = wb.getSheetAt(0);
for (int k = 0; k < 25; k++)
{
HSSFRow row = sheet.getRow(k);
sheet.removeRow(row);
}
for (int k = 74; k < 100; k++)
{
HSSFRow row = sheet.getRow(k);
sheet.removeRow(row);
}
HSSFRow row = sheet.getRow(39);
HSSFCell cell = row.getCell(3);
cell.setCellValue("MODIFIED CELL!!!!!");
wb.write(stream);
stream.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
程序中有说明,如有问题,请大家指出