我正在将数据从Excel文件导入Java JTable
。我可以导入所有工作表,但是我只想导入一些行。这是我用来导入工作表的代码:
private void remplirtable(JTable table, int numfeuil,String s) {
Workbook wb;
File fichier = new File(s);
try {
//création de la table et importation du fichier
wb = Workbook.getWorkbook(fichier);
Sheet sheet = wb.getSheet(numfeuil);
String[] columnsnames=new String[sheet.getColumns()];
DefaultTableModel model = new DefaultTableModel();
//Remplir la table désignée
table.setModel(model);
int colonnes = sheet.getColumns();
int lignes = sheet.getRows();
Object data[] = new Object[colonnes];
for (int i=0; i<lignes; i++){
for (int j=0; j<colonnes; j++){
if (i==0)
{
//Component c=super.prepareRenderer(renderer, j, i);
model.addColumn(sheet.getCell(j,i).getContents());
}
//System.out.println(sheet.getCell(j,i).getContents());
if(i>=1)
data[j]=sheet.getCell(j,i).getContents();
}model.addRow(data);
}model.removeRow(0);
} catch (BiffException | IOException e) {
}
}
为了仅导入行(3,4,5),我使用了此代码。
A
是我们存储行号的数组:private void RemplirPostes(JTable table, int numfeuil,String s,int[] A) {
Workbook wb;
File fichier = new File(s);
try {
//création de la table et importation du fichier
wb = Workbook.getWorkbook(fichier);
Sheet sheet = wb.getSheet(numfeuil);
DefaultTableModel model = new DefaultTableModel();
//Remplir la table désignée
table.setModel(model);
int colonnes = sheet.getColumns();
Object data[] = new Object[colonnes];
for(int k=0;k<A.length;k++)
{
for (int j=0; j<colonnes; j++){
if (A[k]==0)
{
//Component c=super.prepareRenderer(renderer, j, i);
model.addColumn(sheet.getCell(j,A[k]).getContents());
}
//System.out.println(sheet.getCell(j,i).getContents());
if(A[k]>=1)
data[j]=sheet.getCell(j,A[k]).getContents();
}model.addRow(data);
}
model.removeRow(0);
} catch (BiffException | IOException e) {
}
}
所有这些都不起作用。
最佳答案
从此完整的example开始,以下代码创建一个表,该表具有从COLUMNS
到MIN_ROW
的指示数量的MAX_ROW
。
private static final int COLUMNS = 4;
private static final int MIN_ROW = 3;
private static final int MAX_ROW = 5;
…
DataFormatter format = new DataFormatter();
DefaultTableModel model = new DefaultTableModel(0, COLUMNS);
for (Row row : sheet) {
if (row.getRowNum() >= MIN_ROW && row.getRowNum() <= MAX_ROW) {
Vector rowData = new Vector();
for (Cell cell : row) {
rowData.add(format.formatCellValue(cell));
}
model.addRow(rowData);
}
}
…
JFrame f = new JFrame("TableTest");
f.add(new JTable(model));
附录:仔细研究当前的方法,您可能需要容纳不连续的行。用
List<Integer>
替换阵列可能会有所帮助。然后,您可以使用contains()
代替上述谓词:if (a.contains(row.getRowNum()) {…}
附录:要评估公式,可以将
FormulaEvaluator
传递给formatCellValue()
。FormulaEvaluator eval = book.getCreationHelper().createFormulaEvaluator();
…
rowData.add(format.formatCellValue(cell, eval));