아파치 POI를 사용하고 있는데 엑셀 통합 문서의 정보를 가져 오려고합니다. (이해가 .xlsx 파일입니다. POI에서 XSSF를 사용하고 있습니다.) JTable에 표시하십시오. . 그러나이 새로운 열을 만들지 않습니다보고 있습니다. 나는 새로운 벡터에 벡터를 저장하고 벡터를 만들 때 그것을 반복하는 각 행마다 새로운 벡터를 만들지 않는다는 것을 알았다.새 행을 만들지 않고 JTable에 Excel 정보를 추가 하시겠습니까? (.xlsx)
이 정보는 어떻게 저장합니까? 나는 벡터, datatemp를 저장해야하고, 새로운 행이 발견 될 때마다 지우고 데이터 벡터에 추가해야한다고 생각한다. 그러나 나는 이것을 어떻게 할 것인가? 나는 올바른 길을 가고 있는가?
이미지 : (확실하지 난 (10) 대표를 가지고 있지이 인해를 게시 할 수 있지만, 그렇지 않으면 삭제 해 주시기 바랍니다하고있는 경우)
package table_testing_broken_up;
import java.awt.BorderLayout;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class pull_information extends JFrame
{
private static Vector dataTemp = new Vector();
private static Vector columns = new Vector();
private static Vector data = new Vector();
public static DefaultTableModel model = null;
public static JTable table = new JTable();
public static void main(String[] args)
{
makeFrame();
}
static void makeFrame()
{
setData();
JFrame frame = new JFrame("Table Test");
frame.setSize(500, 150);
data.addElement(dataTemp);
model = new DefaultTableModel(data, columns);
table.setModel(model);
table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
frame.add(table.getTableHeader(), BorderLayout.PAGE_START);
frame.add(table);
frame.setVisible(true);
}
static void setData()
{
try
{
FileInputStream file = new FileInputStream(new File("C:\\Testing\\student_employment_form.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext())
{
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
if(row.getRowNum() == 0)
{
while(cellIterator.hasNext())
{
Cell cell = cellIterator.next();
columns.add(cell.getStringCellValue());
if(row.getRowNum() == 1)
{
break;
}
}
continue;
}
while(cellIterator.hasNext())
{
Cell cell = cellIterator.next();
if(rowIterator.hasNext())
{
if(cell.getCellType() == Cell.CELL_TYPE_STRING)
{
dataTemp.add(cell.getStringCellValue());
}
else if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC)
{
dataTemp.add(cell.getNumericCellValue());
}
//data.addElement(dataTemp);
}
else
{
break;
}
}
}
file.close();
}
catch (FileNotFoundException e)
{
System.out.println("File Not found");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
다른 연구 :
내가 사용할 수있는 알고 : JTableReadTableModelTask, 그러나, JComponentPack v3.5는 오픈 소스가 아닌 것, 그리고 C를 사용해야 할 것입니다 돈.
참고 : 이것은 작업을위한 것으로, 작업 속도를 높이기 위해 노력하고있는 작은 프로젝트이며 Comp Sci & 수학에서 B.S를 추구하는 학부입니다. 또한이 파일은 테스트 파일 일 뿐이므로이 파일을 내 메인 프로그램에 구현하고 git으로 푸시합니다.
모든 조언이 많이 부여됩니다. 감사합니다.
가 대단히 감사합니다. 이 지금 작동합니다. 나는 조금 길게 프로그래밍 해 왔다고 생각한다. 산책 할 시간이야! 나는 rep를 줄 것이지만 나는 할 수 없다. ( – Redspart
@Redspart, 나는 Apache POI를 한번도 사용하지 않았지만, 당신의 코드는 나에게 조금 복잡해 보인다. 나는 당신이 RowIterator를 가질 것이라고 생각했을 것이다. CellIterator : 코드는 CellIterator 내에서 RowIterator가 있음을 암시하는 것으로 보입니다 (코드를 올바르게 읽는 경우).Anwyway, 원래 가정이 맞다면 코드를 단순화 할 수있는 몇 가지 코드를 게시했습니다. – camickr
'Sheet'와'Row'는 모두'Iterable'이므로, [here] (http://stackoverflow.com/a/3562214/230513)에서 볼 수 있듯이 _for-each_ 루프를 사용할 수 있습니다. – trashgod