這個是官方網站上給出的一個,我做了一些修改,
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();
}
}
}
程式中有說明,如有問題,請大家指出