スプレッドシートで「期間の売上レポート」というテキストのセルを見つけようとしていますが、セルにはさらに多くのテキストがありますが、 「期間の売上レポート」は変更されない部分であり、見つけることができます。すべてのスプレッドシートの特定のセル。
そのセルの値を読み取ろうとすると、nullが発生します。
これはクラスのコードです:
package excelreader;
import javax.swing.JOptionPane;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.Cell;
/**
*
* @author LuisLaptop
*/
public class FileInfo {
// attributes
private String date;
private String fileName;
private String reportCreator;
private String sheetName;
// constructor
public FileInfo(HSSFSheet sheet) {
}
// Methods
public String getSalesPeriod(HSSFSheet sheet) {
String period = "Sales report for the period";
HSSFRow row = sheet.getRow(2);
HSSFCell cell = row.getCell(0);
if(cell.getCellType() == Cell.CELL_TYPE_STRING)
{
if(cell.getStringCellValue().toString().trim().equals(period))
{
date = cell.getStringCellValue().toString().trim();
return date;
}
}
else
{
JOptionPane.showMessageDialog(null, "The report has no period", "Period Error", JOptionPane.ERROR_MESSAGE);
}
return date;
}
// Getters and setters
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getReportCreator() {
return reportCreator;
}
public void setReportCreator(String reportCreator) {
this.reportCreator = reportCreator;
}
public String getSheetName() {
return sheetName;
}
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
}
これがメインです:
package excelreader;
import java.io.FileInputStream;
import java.io.IOException;
import javax.swing.JOptionPane;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* @author lv10
*/
public class ExcelReader {
public static void main(String[] args) throws IOException {
FileManager fm = new FileManager();
FileInputStream inputFile = new FileInputStream(fm.fileChooser.getSelectedFile());
HSSFWorkbook wb = new HSSFWorkbook(inputFile);
HSSFSheet sheet = wb.getSheetAt(0);
Total t = new Total(sheet);
FileInfo fi = new FileInfo(sheet);
String report = "This is a test report"+ t.getTotal() + " from " + fi.getSalesPeriod(sheet) ;
JOptionPane.showMessageDialog(null, report, "test", JOptionPane.INFORMATION_MESSAGE);
}
}
これは、他の値を提供するクラス全体です。このクラスでは問題はありませんが、コンテキストを提供するために追加しました。
package excelreader;
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
/**
* @author lv10
*/
class Total {
// -------------------------------------------------------------- Attributes
String cellContent[] = {"Total US", "Total DE (EUR)", "Total IT (EUR)"};
private int rownr = 0;
private int colnr = 0;
private double total = 0;
private double sum = 0;
// ------------------------------------------------------------- Constructor
public Total(HSSFSheet sheet)
{
for( int i=0; i<cellContent.length; i++)
{
total = findTotal(sheet, cellContent[i]);
sum+= total;
}
}
// ----------------------------------------------------------------- Methods
public double findTotal(HSSFSheet sheet, String cellContent){
for(Row rows : sheet){
for(Cell cell: rows){
if(cell.getCellType()== Cell.CELL_TYPE_STRING){
if(cell.getStringCellValue().toString().trim().equals(cellContent)){
rownr = rows.getRowNum();
HSSFRow row = sheet.getRow(rownr);
colnr = row.getLastCellNum()-1;
cell = row.getCell(colnr);
return cell.getNumericCellValue();
}
}
} // end of cell loop
} // end of row loop
return 0;
}
// getters and setters
public double getSum() {
return sum;
}
public void setSum(double sum) {
this.sum = sum;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
}