2009-07-24 37 views
29

Tôi muốn tạo tệp Excel và ghi dữ liệu giống như viết một tệp văn bản bằng Java. Tôi đã cố thay đổi tiện ích mở rộng tệp từ .txt thành .xls. Nhưng tôi muốn in đậm chữ cái trong tệp Excel. Làm thế nào tôi có thể làm điều đó?Tạo tệp Excel bằng Java

Tôi đã thử sử dụng API JXL, nhưng mỗi lần tôi phải tạo nhãn tôi muốn thêm không có nhãn. Không thể chỉnh sửa hàng và cột của bảng?

+0

Bạn đang sử dụng gì để tạo excel? bạn có thể hiển thị mã của bạn không? – Maksim

Trả lời

28

Bạn có thể sử dụng Apache POI để tạo tệp nhị phân xls gốc.

Hoặc bạn có thể sử dụng JExcelApi khác, và hơi nhẹ theo tôi nhớ, thư viện Java dành cho Excel.

3

Thay đổi đuôi tệp không bằng bất kỳ cách nào thay đổi nội dung của tệp. Phần mở rộng chỉ là một nhãn.

Nếu bạn muốn làm việc với bảng tính Excel bằng Java, hãy đọc trên thư viện Apache POI.

0

Tôi cũng sử dụng JXLS: nó nhận dữ liệu dưới dạng Bản đồ và mẫu EXCEL với cú pháp chính xác và trả về tệp được điền chính xác. Dữ liệu trong mỗi ô phải là JavaBean với mức độ hiển thị công khai.

Không nên lo lắng nếu bạn phải chèn dữ liệu vào nhiều hơn 1 trang tính: trong trường hợp này tôi đã sử dụng POI.

3

Tệp phẳng không cho phép cung cấp thông tin meta.

Tôi khuyên bạn nên viết ra một bảng HTML chứa thông tin bạn cần và thay vào đó hãy để Excel đọc nó. Sau đó, bạn có thể sử dụng các thẻ <b> để làm những gì bạn yêu cầu.

0

Để tạo một bảng và định dạng một tế bào sử dụng POI, xem ví dụ Working with Fonts, và sử dụng:

font.setBoldweight(Font.BOLDWEIGHT_BOLD); 

POI hoạt động rất tốt. Có một số điều bạn không thể làm (ví dụ: tạo macro VBA), nhưng nó sẽ đọc/ghi bảng tính bằng macro, vì vậy bạn có thể tạo một trang mẫu phù hợp, đọc và thao tác với POI, sau đó ghi ra.

8

cảnh báo Hội chợ về thế hệ Excel Apache POI của ... (Tôi biết đây là một bài cũ, nhưng điều quan trọng trong trường hợp của một người nào đó trông này lên một lần nữa giống như tôi vừa làm)

Nó có một vấn đề rò rỉ bộ nhớ, được cho là đã được giải quyết vào năm 2006, nhưng mọi người gần đây vẫn gặp phải sự cố. Nếu bạn muốn tự động tạo số lượng lớn excel (tức là, nếu bạn muốn tạo một tệp lớn, duy nhất, một số lượng lớn tệp nhỏ hoặc cả hai), tôi khuyên bạn nên sử dụng một API khác. Hoặc là, hoặc tăng kích thước ngăn xếp JVM lên tỷ lệ phi lý, và có thể nhìn vào các chuỗi nội bộ nếu bạn biết bạn sẽ không thực sự làm việc với nhiều chuỗi khác nhau (mặc dù, dĩ nhiên, chuỗi ký tự có nghĩa là nếu bạn có số lượng lớn các chuỗi khác nhau, bạn sẽ gặp sự cố bộ nhớ chương trình hoàn toàn khác. Vì vậy, hãy cân nhắc trước khi bạn đi tuyến đường đó).

+4

Hiện tại vào năm 2015 và đã quan tâm đến việc sử dụng Apache POI nhưng có những nghi ngờ do trải nghiệm của bạn, tuy nhiên chỉ muốn chia sẻ [Câu hỏi thường gặp] này (https://poi.apache.org/faq.html#faq-N10109) về trang web mà tôi nghĩ có thể có liên quan để gỡ rối các sự cố tương tự. – Hesham

+0

@ Liên kết của Hesham không còn liên kết đến một câu hỏi cụ thể nữa. [Điều này] (https://poi.apache.org/faq.html#faq-N10165) và [this this] (https://poi.apache.org/faq.html#faq-N1023C) có vẻ liên quan. – Evan

61
//Find jar from here "http://poi.apache.org/download.html" 
import java.io.*; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFCell; 

public class CreateExlFile{ 
    public static void main(String[]args) { 
     try { 
      String filename = "C:/NewExcelFile.xls" ; 
      HSSFWorkbook workbook = new HSSFWorkbook(); 
      HSSFSheet sheet = workbook.createSheet("FirstSheet"); 

      HSSFRow rowhead = sheet.createRow((short)0); 
      rowhead.createCell(0).setCellValue("No."); 
      rowhead.createCell(1).setCellValue("Name"); 
      rowhead.createCell(2).setCellValue("Address"); 
      rowhead.createCell(3).setCellValue("Email"); 

      HSSFRow row = sheet.createRow((short)1); 
      row.createCell(0).setCellValue("1"); 
      row.createCell(1).setCellValue("Sankumarsingh"); 
      row.createCell(2).setCellValue("India"); 
      row.createCell(3).setCellValue("[email protected]"); 

      FileOutputStream fileOut = new FileOutputStream(filename); 
      workbook.write(fileOut); 
      fileOut.close(); 
      System.out.println("Your excel file has been generated!"); 

     } catch (Exception ex) { 
      System.out.println(ex); 
     } 
    } 
} 
+0

Xin chào, điều này đã tạo cho tôi một tệp nhị phân. làm cách nào để tạo một tệp excel mà tôi có thể mở bằng Excel? – Dejell

+0

Câu hỏi nhỏ ở đây - tại sao bạn đúc giá trị int vào HSSFSheet.createRow thành một đoạn ngắn? API mất một int. –

3

Tôi đã tạo API để tạo tệp Excel dễ dàng hơn.

Create Excel - Creating Excel from Template

Chỉ cần thiết lập các giá trị cần thiết khi instantiation sau đó gọi thực thi(), nó sẽ được tạo ra dựa trên thư mục đầu ra mong muốn của bạn.

Nhưng trước khi bạn sử dụng, bạn phải có Mẫu Excel sẽ được sử dụng làm mẫu của tệp Excel mới được tạo.

Ngoài ra, bạn cần Apache POI trong đường dẫn lớp của dự án của bạn.

+0

công việc tuyệt vời @Erieze Lagera. thanks –

+0

Bạn có các công cụ khác để tạo pdf, csv ... không? –

+0

@PashaGharibi Bạn có thể thử [JasperReports] (https://community.jaspersoft.com/) để tạo PDF. Nó có IDE để tạo mẫu của báo cáo. [Jaspersoft Studio] (https://community.jaspersoft.com/project/jaspersoft-studio/releases) –

3
File fileName = new File(".....\\Fund.xlsx"); 

public static void createWorkbook(File fileName) throws IOException { 
    try { 
     FileOutputStream fos = new FileOutputStream(fileName); 
     XSSFWorkbook workbook = new XSSFWorkbook();    

     XSSFSheet sheet = workbook.createSheet("fund"); 

     Row row = sheet.createRow(0); 
     Cell cell0 = row.createCell(0); 
     cell0.setCellValue("Nav Value"); 

     Cell cell1 = row.createCell(1); 

     cell1.setCellValue("Amount Change");  

     Cell cell2 = row.createCell(2); 
     cell2.setCellValue("Percent Change"); 

     workbook.write(fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

Tôi có thể thấy sự tồn tại của tệp đó như thế nào. Tôi đang làm việc trên nó từ sáng nhưng không sử dụng. hãy giúp tôi ra. –

Các vấn đề liên quan