Cách lấy giá trị cột cụ thể từ excel bằng Java

Tôi đang gặp sự cố trong excel khi sử dụng Apache POI. Tôi có thể đọc qua các hàng, nhưng đôi khi tôi rơi vào tình huống chỉ muốn đọc một cột cụ thể

Vì vậy, có thể đọc bất kỳ cột cụ thể nào như chỉ cột 'A' hoặc chỉ cột 'C'

Tôi đang sử dụng ngôn ngữ Java cho việc này

Giải pháp tốt nhất

heikkim nói đúng, đây là một số mã mẫu được điều chỉnh từ một số mã tôi có

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
...
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
  row = sheet.getRow(rowIndex);
  if (row != null) {
    Cell cell = row.getCell(colIndex);
    if (cell != null) {
      // Found column and there is value in the cell.
      cellValueMaybeNull = cell.getStringCellValue();
      // Do something with the cellValueMaybeNull here ...
      // break; ???
    }
  }
}

Đối với colCount, hãy sử dụng một cái gì đó như row.getPhysicalNumberOfCells()

Giải pháp liên quan

C# – Cách tạo một Excel (. XLS và. XLSX) trong C# mà không cần cài đặt Microsoft Office

Bạn có thể sử dụng thư viện có tên ExcelLibrary. Đó là một thư viện mã nguồn mở miễn phí được đăng trên Google Code

Thư viện Excel

Đây có vẻ là một cổng của PHP ExcelWriter mà bạn đã đề cập ở trên. Nó sẽ không ghi vào cái mới. xlsx, nhưng họ đang làm việc để thêm chức năng đó vào

Nó rất đơn giản, nhỏ và dễ sử dụng. Ngoài ra, nó còn có DataSetHelper cho phép bạn sử dụng DataSets và DataTables để dễ dàng làm việc với dữ liệu Excel

ExcelLibrary dường như vẫn chỉ hoạt động đối với định dạng Excel cũ hơn (. xls), nhưng có thể bổ sung hỗ trợ trong tương lai cho các định dạng 2007/2010 mới hơn

Bạn cũng có thể sử dụng EPPlus, chỉ hoạt động với các tệp định dạng Excel 2007/2010 (. tệp xlsx). Ngoài ra còn có NPOI hoạt động với cả hai

Có một vài lỗi đã biết với mỗi thư viện như đã lưu ý trong các nhận xét. Nói chung, EPPlus dường như là lựa chọn tốt nhất theo thời gian. Nó dường như cũng được cập nhật và ghi lại tích cực hơn

Ngoài ra, như được lưu ý bởi @АртёмЦарионов bên dưới, EPPlus có hỗ trợ cho Pivot Tables và ExcelLibrary có thể có một số hỗ trợ (Sự cố bảng Pivot trong ExcelLibrary)

Đây là một vài liên kết để tham khảo nhanh.
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU (LGPL) - Không còn được duy trì
EPPlus 5 - Polyform Noncommercial - Bắt đầu từ tháng 5
NPOI - Apache License

Dưới đây là một số mã ví dụ cho ExcelLibrary

Dưới đây là một ví dụ lấy dữ liệu từ cơ sở dữ liệu và tạo sổ làm việc từ đó. Lưu ý rằng mã Thư viện Excel là một dòng ở dưới cùng

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

Tạo tệp Excel dễ dàng như vậy. Bạn cũng có thể tạo các tệp Excel theo cách thủ công, nhưng chức năng trên mới là thứ thực sự gây ấn tượng với tôi

Java – Cách làm tròn số đến n chữ số thập phân trong Java

Sử dụng setRoundingMode, đặt RoundingMode một cách rõ ràng để xử lý vấn đề của bạn với vòng chẵn một nửa, sau đó sử dụng mẫu định dạng cho đầu ra được yêu cầu của bạn

Ví dụ

DecimalFormat df = new DecimalFormat("#.####");
df.setRoundingMode(RoundingMode.CEILING);
for (Number n : Arrays.asList(12, 123.12345, 0.23, 0.1, 2341234.212431324)) {
    Double d = n.doubleValue();
    System.out.println(df.format(d));
}

đưa ra đầu ra

12
123.1235
0.23
0.1
2341234.2125

CHỈNH SỬA. Câu trả lời ban đầu không đề cập đến tính chính xác của các giá trị kép. Điều đó tốt nếu bạn không quan tâm nhiều đến việc nó làm tròn lên hay xuống. Nhưng nếu bạn muốn làm tròn chính xác, thì bạn cần tính đến độ chính xác dự kiến ​​của các giá trị. Các giá trị dấu phẩy động có biểu diễn nhị phân bên trong. Điều đó có nghĩa là một giá trị như 2. 7735 không thực sự có giá trị chính xác bên trong. Nó có thể lớn hơn một chút hoặc nhỏ hơn một chút. Nếu giá trị bên trong nhỏ hơn một chút thì sẽ không làm tròn lên 2. 7740. Để khắc phục tình trạng đó, bạn cần lưu ý về độ chính xác của các giá trị mà bạn đang làm việc và cộng hoặc trừ giá trị đó trước khi làm tròn. Ví dụ: khi bạn biết rằng giá trị của mình chính xác đến 6 chữ số, thì để làm tròn giá trị nửa chừng lên, hãy cộng độ chính xác đó vào giá trị

Làm cách nào để lấy dữ liệu cột cụ thể từ Excel trong Java?

Đọc một giá trị ô cụ thể từ tệp excel (. .
// đọc giá trị của một ô cụ thể
nhập java. io. FileInputStream;
nhập java. io. FileNotFoundException;
nhập java. io. IOException;
tổ chức nhập khẩu. apache. poi. ss. mô hình người dùng. Tế bào;
tổ chức nhập khẩu. apache. poi. ss. mô hình người dùng. *;
tổ chức nhập khẩu. apache. poi. ss. mô hình người dùng. Tấm;

Làm cách nào để lấy giá trị ô hàng từ tên tiêu đề cột trong Excel bằng Java?

getStringCellValue() – Lấy giá trị của ô dưới dạng Chuỗi. getRow(int) – Trả về hàng. getCell(int) – Lấy ô đại diện cho một cột nhất định. getNumericCellValue() – Lấy giá trị của ô dưới dạng số.