创建Excel文件的副本无法按预期工作

时间:2016-11-08 09:42:50

标签: java excel poi-hssf

我想在替换" ' 后将一个excel(.xls)的全部内容复制到另一个内容中。但是,这段代码创建了一个新的excel,但只复制了最后一列(在我的例子中,它是第7列)。请告知我这个代码出错的地方......

公共类重命名{

static HSSFRow row_read = null;
static HSSFRow row_write = null;
static Cell cell;
static FileOutputStream output = null;
static HSSFWorkbook workbook_read = null;
static HSSFWorkbook workbook_write = null;
static HSSFSheet sheet_read = null;
static HSSFSheet sheet_write = null;
public static void removechar()
{
try{
FileInputStream input = new FileInputStream("inputpath//test_input.xls");
workbook_read = new HSSFWorkbook(input);
sheet_read = workbook_read.getSheet("Report");
workbook_write = new HSSFWorkbook();
sheet_write = workbook_write.createSheet("Test");
DataFormatter formatter = new DataFormatter();
int rowCount = sheet_read.getLastRowNum();
System.out.println(rowCount);
for(int rowNum = 0; rowNum<=rowCount; rowNum++)
{
for(int cellNum = 0; cellNum<=7; cellNum++)
{
//Cell cell = null;
row_read=sheet_read.getRow(rowNum);
row_write = sheet_write.createRow(rowNum);
String temp = formatter.formatCellValue(row_read.getCell(cellNum));
//System.out.println(temp);
String temp1 = temp.replaceAll("\'", "");
String temp2 = temp1.replaceAll("\"", "");
System.out.println(temp2);
cell = row_write.createCell(cellNum);
cell.setCellValue(temp2);
}
}

output = new FileOutputStream("outputpath\\test_output.xls");
workbook_write.write(output);

}
catch(Exception e)
{
    e.printStackTrace();
}

}
public static void main(String[] argv) throws IOException {
    Rename.removechar();

}

}

谢谢

1 个答案:

答案 0 :(得分:1)

问题在于以下几行......

row_read=sheet_read.getRow(rowNum);
row_write = sheet_write.createRow(rowNum);

它需要在单元循环之外(for(int cellNum = 0; cellNum<=7; cellNum++)

它应该看起来像。

 for (int rowNum = 0; rowNum <= rowCount; rowNum++) {
            row_read = sheet_read.getRow(rowNum);
            row_write = sheet_write.createRow(rowNum);
            for (int cellNum = 0; cellNum <= 7; cellNum++) {
                // Cell cell = null;
String temp =  formatter.formatCellValue(row_read.getCell(cellNum));

您也可能需要将import static Cell cell;更改为import HSSFCell cell;

以下是完整的代码。

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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DataFormatter;

public class Rename {


    static HSSFRow row_read = null;
    static HSSFRow row_write = null;
    static HSSFCell cell;

    static FileOutputStream output = null;
    static HSSFWorkbook workbook_read = null;
    static HSSFWorkbook workbook_write = null;
    static HSSFSheet sheet_read = null;
    static HSSFSheet sheet_write = null;

    public static void removechar() {
        try {
            FileInputStream input = new FileInputStream("D://test_input.xls");
            workbook_read = new HSSFWorkbook(input);
            sheet_read = workbook_read.getSheet("Report");
            workbook_write = new HSSFWorkbook();
            sheet_write = workbook_write.createSheet("Test");
            DataFormatter formatter = new DataFormatter();
            int rowCount = sheet_read.getLastRowNum();
            System.out.println(rowCount);
            for (int rowNum = 0; rowNum <= rowCount; rowNum++) {
                row_read = sheet_read.getRow(rowNum);
                row_write = sheet_write.createRow(rowNum);
                for (int cellNum = 0; cellNum <= 7; cellNum++) {
                    // Cell cell = null;
                    String temp = formatter.formatCellValue(row_read.getCell(cellNum));
                    // System.out.println(temp);
                    String temp1 = temp.replaceAll("\'", "");
                    String temp2 = temp1.replaceAll("\"", "");
                    System.out.println(temp2);
                    cell = row_write.createCell(cellNum);
                    cell.setCellValue(temp2);
                }
            }

            output = new FileOutputStream("D://test_output.xls");
            workbook_write.write(output);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] argv) throws IOException {
        Rename.removechar();
    }
}