Saya menggunakan Apache POI API
untuk menghasilkan excel spreadsheet
keluaran beberapa data.
Masalah yang saya hadapi adalah ketika spreadsheet dibuat dan dibuka, kolom tidak diperluas sehingga beberapa teks panjang seperti teks berformat tanggal tidak muncul pada pandangan pertama.
Saya cukup mengklik dua kali batas kolom di excel untuk memperluas atau menyeret batas untuk menyesuaikan lebar kolom tetapi mungkin ada 20+ kolom dan tidak mungkin saya melakukannya secara manual setiap kali saya membuka spreadsheet :(
Saya menemukan (meskipun bisa menjadi metode yang salah) groupRow()
dan setColumnGroupCollapsed()
mungkin bisa melakukan trik tetapi tidak berhasil. Mungkin saya menggunakannya dengan cara yang salah.
Cuplikan Kode Sampel
Workbook wb = new HSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
//create sheet
Sheet sheet = wb.createSheet("masatoSheet");
//not really working yet.... :(
//set group for expand/collapse
//sheet.groupRow(0, 10); //just random fromRow toRow argument values...
//sheet.setColumnGroupCollapsed(0, true);
//create row
Row row = sheet.createRow((short)0);
//put a cell in the row and store long text data
row.createCell(0).setCellValue("Loooooooong text not to show up first");
Saat spreadsheet ini dibuat, string "Looooooong teks tidak muncul pertama kali" ada di dalam sel tetapi karena kolom tidak diperluas hanya "Loooooooo" yang muncul.
Bagaimana saya mengkonfigurasinya sehingga ketika saya membuka spreadsheet saya, kolomnya sudah diperluas ???
sumber
Jawaban:
Setelah Anda menambahkan semua data Anda ke lembar, Anda dapat meminta
autoSizeColumn(int column)
lembar Anda untuk mengisi kolom secara otomatis ke ukuran yang tepatBerikut ini tautan ke API .
Lihat posting ini untuk referensi lebih lanjut Masalah dalam menyesuaikan ukuran sel excel dengan ukuran konten saat menggunakan apache poi
sumber
autoSizeColumn
tidak berskala dengan baik dan akan sangat lambat jika Anda memiliki banyak baris. Saya harus sedikit meretas dan melakukan sesuatu yang mirip dengan apa yang disarankan dalam pertanyaan ini .Tips: Untuk membuat ukuran Otomatis berfungsi, panggilan ke
sheet.autoSizeColumn(columnNumber)
harus dilakukan setelah mengisi data ke dalam excel.Memanggil metode sebelum mengisi data, tidak akan berpengaruh.
sumber
(5 until row.lastCellNum).forEach { colNum -> val columnWidth = (row.getCell(colNum).toString().length * 0.44 + 2.24) * 768 reportSheet.setColumnWidth(colNum, columnWidth.toInt()) }
Jika Anda ingin mengubah ukuran semua kolom secara otomatis di buku kerja, berikut adalah metode yang mungkin berguna:
sumber
NullPointerException
dirow.cellIterator()
. Apakah karena saya tidak memiliki nilai di salah satu sel?Anda dapat mencoba sesuatu seperti ini:
Berikut paramsnya: nomor kolom dalam sheet dan lebarnya Tetapi, satuan lebarnya cukup kecil, Anda dapat mencoba 4000 misalnya.
sumber
Untuk Excel POI:
sumber
contoh kode di bawah ini
// ini penting
// argumen harus berupa nomor sel
Periksa outputnya dan jadi gila :)
sumber
Jika Anda mengetahui jumlah kolom Anda (fe itu sama dengan daftar koleksi). Anda cukup menggunakan satu liner ini untuk menyesuaikan semua kolom dari satu lembar (jika Anda menggunakan setidaknya java 8):
sumber
Saya menggunakan solusi sederhana di bawah ini:
Ini adalah workbook dan sheet Anda:
lalu tambahkan data ke lembar Anda dengan kolom dan baris. Setelah selesai menambahkan data ke lembar tulis kode berikut ke
autoSizeColumn
lebar.Di sini, alih-alih 15, Anda menambahkan jumlah kolom di lembar Anda.
Semoga seseorang membantu ini.
sumber
Sangat sederhana, gunakan kode satu baris ini dataSheet.autoSizeColumn (0)
atau berikan jumlah kolom di braket dataSheet.autoSizeColumn (nomor sel)
sumber
Anda juga bisa membungkus teks. Kode sampel PFB:
sumber
Anda dapat menggunakan
setColumnWidth()
jika Anda ingin memperluas sel Anda lebih banyak.sumber