jTableを作成してExcel.Iにエクスポートするコードを作成しましたが、Excelファイルを開くとファイルが完全には復元されません。 以下の問題が表示されます。JtableをExcelファイルに変換する
修理された部品:/xl/worksheets/sheet2.xml部分にXMLエラーがあります。読み込みエラー。 2行目、0列。 修理部品:/xl/worksheets/sheet7.xml部分にXMLエラーがあります。読み込みエラー。 2行目、列0 削除レコード:名前付き/xl/workbook.xml一部の範囲(ワークブック) 削除レコード:表/xl/tables/table1.xml部分から(表)
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.awt.event.ActionEvent;
public class GUI {
private static JTextField textField;
private static JTextField textField_1;
public static void main(String args[]) throws IOException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = null ;
Object columnNames[] = { "Column One", "Column Two"};
DefaultTableModel model = new DefaultTableModel(rowData,columnNames);
frame.getContentPane().setLayout(null);
JTable table = new JTable(model);
table.setModel(model);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBounds(76, 106, 300, 200);
scrollPane.setVisible(true);
frame.getContentPane().add(scrollPane);
textField = new JTextField();
textField.setBounds(76, 21, 86, 20);
frame.getContentPane().add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setBounds(76, 61, 86, 20);
frame.getContentPane().add(textField_1);
textField_1.setColumns(10);
JLabel lblNewLabel = new JLabel("Name");
lblNewLabel.setBounds(20, 24, 46, 14);
frame.getContentPane().add(lblNewLabel);
JLabel lblAge = new JLabel("Age");
lblAge.setBounds(20, 64, 46, 14);
frame.getContentPane().add(lblAge);
JButton btnNewButton = new JButton("Get Data");
btnNewButton.setBounds(235, 40, 89, 23);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String name = textField.getText().toString();
int age = Integer.parseInt(textField_1.getText());
model.addRow(new Object[] {name,age});
Object obj1 = GetData(table, 0,0);
System.out.println("Cell value of 1 column and 1 row :" + obj1);
Object obj2 = GetData(table, 0,1);
System.out.println("Cell value of 2 column and 1 row :" + obj2);
}
});
frame.getContentPane().add(btnNewButton);
JButton btnNewButton_1 = new JButton("Excel");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
writeToExcel(table);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btnNewButton_1.setBounds(340, 40, 89, 23);
frame.getContentPane().add(btnNewButton_1);
frame.setSize(455, 356);
frame.setVisible(true);
}
protected static void writeToExcel(JTable table) throws Exception {
try {
File file = new File("IET.xlsx");
FileInputStream inputStream = new FileInputStream(file);
XSSFWorkbook workbook = (XSSFWorkbook) WorkbookFactory.create(inputStream);
XSSFSheet sh = workbook.getSheet("UserInputs");
TableModel model = table.getModel();
String value1 = model.getValueAt(0, 0).toString();
String value2 = model.getValueAt(0, 1).toString();
workbook.getSheet("UserInputs").getRow(8).getCell(1).setCellValue(value2);
FileOutputStream fileOut = new FileOutputStream(file);
workbook.write(fileOut);
fileOut.close();
workbook.close();
System.out.println("File written successfully");
}
catch(Exception e){
System.out.print(e);}
}
private static Object GetData(JTable table, int x, int y) {
return table.getValueAt(x, y).toString();
}
}
がありますコードに何か問題がありますか?
おそらく直近の問題には関係しませんが、Java GUIは異なるロケールで異なるPLAFを使用する異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –
'workbook.write(fileOut);は' workbook.write(fileOut);でなければなりません。 fileOut.flush(); '? –
シート「UserInputs」のセル「B9」が表内の表オブジェクトの見出しセルである場合に限り、「削除されたレコード:/xl/tables/table1.xmlの表(表)からの表」という動作を再現できます。シート。しかし、なぜあなたはJTableのコンテンツセルの内容でExcelテーブルの見出しを上書きしようとしていますか?だから助けを得るためには、 'IET.xlsx'にどのようなコンテンツが記述されているのか、そのコンテンツで何をしようとしているのか正確に説明する必要があります。 –