poi对Excel文件的编辑

这个是官方网站上给出的一个,我做了一些修改,
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();
		}
	}
}

程序中有说明,如有问题,请大家指出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值