Ich habe vor kurzem mit Java arbeiten und ich habe einige Probleme mit der Apache Poi-Bibliothek konfrontiert, wenn ich eine Excel-Datei erstellen muss, beginnend mit einem JTable.Apache Poi: Speichern von JTable in eine Datei
Ich habe viele Threads gelesen und komme mit Code, der einfach nicht funktioniert (auch wenn das ziemlich einfach ist und es viele Beispiele gab, die mich noch dumpfer aussehen lassen) und ich hoffte, dass jemand könnte helfen Sie mir.
sind also hier die Fragen:
a) warum die for-Schleife, die die Excel-Datei schreiben soll, nicht jede Zelle füllen? (Die einzige Zeile mit Daten in der Excel-Datei ist die sechste, was mich auch fragt, warum null Elemente im Tabellenmodell für die Methoden getRowCount/Column gezählt werden. Außerdem weiß ich, dass es eine benutzerdefinierte Zeichenfolge und nicht die Tabelle druckt selbst aber speichern, dass für Punkt b)
b) Wie soll ich die jtable Modellelemente verwenden, um die Excel-Datei zu füllen, da ich beim Erstellen der Tabelle Objekt als Zeilentyp wählen musste? (Ich habe auch Probleme mit der Art von Objekten besonders, solange es eine String || Integer ist, gibt es überhaupt kein Problem, aber die Tabelle soll eine Mischung aus beidem haben, die nicht zu funktionieren scheint, wenn Sie es versuchen verwenden sie die setCellValue() -Methode mit etwas anderes aus dem String || integer..or zumindest konnte ich es nicht)
c) lassen sie uns sagen, dass ich später die jtable aus der Datei füllen wollen würde Ich vorher erstellt, würde ich einfach die Lösung zu Punkt b) verwenden müssen (anders herum) nach dem Lesen der Datei mit der bufferedReader-Klasse?
Haftungsausschluss: der erste Teil des Codes automatisch generiert durch Netbeans wie Sie wahrscheinlich die HSSF Teil kam ich sagen kann, mit am Ende ist, aber ich dachte, Sie könnten das Ganze sehen wollen, sorry wenn es irgendwie unordentlich aussieht.
Hier ist der Code:
package poitest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
public class POITestFrame extends javax.swing.JFrame {
/**
* Creates new form POITestFrame
*/
public POITestFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
excelButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
excelButton.setText("ESPORTA!");
excelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
excelButtonActionPerformed(evt);
}
});
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"Boolean", "Integer", "String", "Array"},
{"x*y", "x+y", "x/y", "x-y"},
{"32", "43", "12", "24"},
{"casa", "cantiere", "museo", "acquario"},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE)
.addComponent(excelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(excelButton)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void excelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_excelButtonActionPerformed
try {
PoiWriter(jTable1);
} catch (FileNotFoundException ex) {
Logger.getLogger(POITestFrame.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(POITestFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_excelButtonActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(POITestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(POITestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(POITestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(POITestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new POITestFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton excelButton;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration//GEN-END:variables
private void PoiWriter(JTable jTable1) throws FileNotFoundException, IOException {
TableModel model = jTable1.getModel();
// create a workbook
Workbook wb = new HSSFWorkbook(); // xls file
// create a new sheet
Sheet sheet = wb.createSheet("Foglio di Prova!");
// declare a row object reference
Row r = null;
// declare a cell object reference
Cell c = null;
// create a new file
FileOutputStream fos;
fos = new FileOutputStream("File di Prova.xls");
// create a sheet table rows
int rownum;
for (rownum = (short) 0; rownum < model.getRowCount(); rownum++) {
// create a row
r = sheet.createRow(rownum);
}
for (short cellnum = (short) 0; cellnum < model.getRowCount(); cellnum ++) {
// create a numeric cell
c = r.createCell(cellnum);
// populate table with custom objects
for(int i=0; i < model.getRowCount();i++){
for(int j=0;j < model.getColumnCount();j++){
String aplala = "blabla";
c.setCellValue(aplala);
}
}
}
wb.write(fos);
fos.close();
}
}
PS: Wenn Sie sich fragen, warum ich die Tabelle mit Objekttypen gebaut: Das ist nicht das Projekt mit ich arbeite, habe ich diese Schnipsel HSSF zu testen Da die resultierende Excel ist ziemlich editierbar, aber die Dinge scheinen nicht gut zu gehen.
PPS: Ich habe auch versucht, mit der Tokenizer-Klasse zu arbeiten, aber ich bin mir nicht sicher, ob Sie die resultierende Excel-Datei genauso bearbeiten können wie mit poi lib.
PPPS: Dies ist mein allererster Versuch mit Java, also, bitte, sei nicht zu grob!
Ich hoffe, die Fragen klar genug waren und Dank im Voraus, ich bin versucht, bei der Programmierung besser werden: P
EDIT: nach einem Tag der Praxis ist es das, was ich mit dem kam scheint mit zu arbeiten die Apache Poi-Bibliothek, danke für die Hilfe Jungs gab es gute Hinweise!
int rowNum;
int colNum;
int tempRows;
int rowCount = model.getRowCount();
int columnCount = model.getColumnCount();
// create the headers
for (colNum = 0; colNum < columnCount; colNum++) {
if (colNum == 0) {
r = sheet.createRow(0);
}
c = r.createCell(colNum);
c.setCellValue(model.getColumnName(colNum));
}
for (rowNum = 0; rowNum < rowCount; rowNum++) {
// create rows + 1 (to account for the headers)
tempRows = rowNum + 1;
r = sheet.createRow(tempRows);
for (short cellnum = 0; cellnum < columnCount; cellnum ++) {
// create cells
c = r.createCell(cellnum);
// add values from table
c.setCellValue(model.getValueAt(rowNum, cellnum).toString());
}
}
Fühlen Sie sich frei zu äußern, wenn Sie den Code denken kann verbessert werden, Vorschläge sind immer willkommen, vor allem für Neulinge wie mich;)
Nochmals vielen Dank für die Tipps, haben sie wirklich der Trick ^^
Dank, dass sollte wirklich help..and ich denke, ich werde Tutorials lesen, um wieder da ich anscheinend nicht erfasse, wie die Dinge gut genug funktionieren: P – Marchius
du bist willkommen – mKorbel