【发布时间】:2015-12-30 03:54:36
【问题描述】:
我编写了一个代码,它从一个输入 excel 文件中获取数据,并编写一个具有所需组织的新输出文件。我遇到的问题是,当我打开 Java 文件时,只有 for 循环中最新的列有数据。我已经通过在不同时间打破 for 循环来测试我的 for 循环是否错误。测试表明它确实在正确的列中写入了正确的数据。我不知道它为什么选择删除上一列。我是否缺少一行来保存我刚刚制作的单元格值,以将数据保留在我正在处理的工作表上?
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.SheetConditionalFormatting;
import org.apache.poi.ss.usermodel.ConditionalFormattingRule;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.ComparisonOperator;//compare two different values
import org.apache.poi.ss.usermodel.PatternFormatting;
import org.apache.poi.ss.usermodel.IndexedColors;
import java.util.Iterator;
import java.io.*;
import javax.swing.JFileChooser;
public class Reorganizer
{
public static void main(String[] args)
{
/*File Chooser*/
JFileChooser fileChooser = new JFileChooser();//lets user choose file
int returnValue = fileChooser.showOpenDialog(null);//null bc we don't have parent classes, lets user choose through an open window
if(returnValue == JFileChooser.APPROVE_OPTION)
{
try
{
Workbook wb= new HSSFWorkbook(new FileInputStream(fileChooser.getSelectedFile()));//setting the input file as a workbook
Sheet inputSheet = wb.getSheetAt(0);//the sheet from the input file
Workbook wb1 = new HSSFWorkbook();//creating a new workbook to later be put into the output file
Sheet outputSheet = wb1.createSheet("Sheet 1");//creates new sheet on the output excel file
//first need something to find cell# of the file
Row idRow = inputSheet.getRow(0);
int cellCounter=0;
for(Iterator<Cell> cit = idRow.cellIterator(); cit.hasNext();)//goes down the row, until there is nothing
{
Cell cell = cit.next();
cellCounter++;
}
//finds the number of rows
int rowCounter=0;
for(Iterator<Row> rit = inputSheet.rowIterator();rit.hasNext();)//goes down the column, until there is nothing
{
Row row = rit.next();
rowCounter++;
}
//The first row of the document should be the labeling process
//Set the row(0) and the cells(9)
Row labelRow = outputSheet.createRow(0);
//for loop to make 9 cells with labels
String[] cellValues = new String[]{"Chr","Pos","Olfr","Subfamily","Cluster","OP6u","OP6d","OP27u","OP27d"};
for(int i=0; i<=9;i++)
{
Cell labelCells = labelRow.createCell(i);
if(i<=8)
{
labelCells.setCellValue(cellValues[i]);
for(Iterator<Cell> cit = idRow.cellIterator(); cit.hasNext(); )
{
Cell cell = cit.next();
cell.setCellType(Cell.CELL_TYPE_STRING);
if(cellValues[i].equals(cell.getStringCellValue()))
{
for(int j=1;j<rowCounter;j++)
{
int cellnum = cell.getColumnIndex();
Cell inputCell = inputSheet.getRow(j).getCell(cellnum);
inputCell.setCellType(Cell.CELL_TYPE_STRING);
String data = inputCell.getStringCellValue();
Cell outputCell = outputSheet.createRow(j).createCell(i);
outputCell.setCellValue(data);
System.out.println(cellnum);//tells me where the input column was from
System.out.println(i);////tells me what row cell I'm writing on
System.out.println(j);//tells me what row number
System.out.println(data);//tells me the data being inputed into file
//used the above prints to find out what it was doing,
//this is the code used to write the data
}
}
}
}
else
{
labelCells.setCellValue("");
}
}
FileOutputStream output = new FileOutputStream("Reorganized.xls");
wb1.write(output);
output.flush();
output.close();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
【问题讨论】:
标签: java excel apache-poi