Как создать CellStyle для книги, созданной с помощью WorkbookFactory?

Я работаю над Java-кодом, где мне приходится сравнивать два листа excel независимо от формата (xls или xlsx) и копировать строки, которые отличаются от нового листа excel. Затем я прочитал о WorkbookFactory, который принял бы оба формата. Ниже приведен фрагмент кода, который я создал: Пожалуйста, помогите!

import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.IndexedColors;

 class Compare extends CopyRow
 { 
 //<-------VARIABLES DECLARATION & INITIALISATION----->

 Workbook outputWorkbook,workbook1,workbook2;
 Sheet excel1Sheet,excel2Sheet,newSheet;

 public void compare(String fileA,String fileB)

 {
 try
 {
 if(fileA.endsWith(".xls")outputWorkbook = new XSSFWorkbook(new FileInputStream("C:/Documents and Settings/eclipse/workspace/CompareExcelV2/output.xls"));
else
outputWorkbook = new XSSFWorkbook(new FileInputStream("C:/Documents and Settings/eclipse/workspace/CompareExcelV2/output.xlsx"))
 workbook1 = WorkbookFactory.create(new File(fileA));
 workbook2 = WorkbookFactory.create(new File(fileB));

 CellStyle excel1Red = new workbook1.createCellStyle(); **//ERROR HERE**
 CellStyle excel2Green = new workbook2.createCellStyle(); **//ERROR HERE**
 CellStyle newStyle = new outputWorkbook.createCellStyle();**//ERROR HERE**

 }
 catch {}

}

Я не могу создать CellStyle. Я получаю следующую ошибку:

workbook1 cannot be resolved to a type

workbook2 cannot be resolved to a type

outputWorkbook cannot be resolved to a type

1 ответ

Если мы возьмем ваш код:

if(fileA.endsWith(".xls")outputWorkbook = new XSSFWorkbook(new FileInputStream("C:/Documents and Settings/eclipse/workspace/CompareExcelV2/output.xls"));
else outputWorkbook = new XSSFWorkbook(new FileInputStream("C:/Documents and Settings/eclipse/workspace/CompareExcelV2/output.xlsx"))
workbook1 = WorkbookFactory.create(new File(fileA));
workbook2 = WorkbookFactory.create(new File(fileB));

Тогда есть несколько вещей. Один из них заключается в том, что открытие из файла - это меньшая память, чем из потока, во-вторых, ваш код, похоже, не делает то, что вы хотите. Кажется, вы открываете outputWorkbook на основе файла, когда я подозреваю, что вам просто нужен новый пустой, который вы позже сохраните. Вместо этого, как насчет чего-то вроде:

final String path = "C:/Documents and Settings/eclipse/workspace/CompareExcelV2/";
Workbook outputWorkbook;
FileOutputStream outputTo;
if (fileA.endsWith(".xls") {
 outputWorkbook = new HSSFWorkbook();
 outputTo = new FileOutputStream(path + "output.xls");
} else {
 outputWorkbook = new XSSFWorkbook();
 outputTo = new FileOutputStream(path + "output.xlsx");
}
Workbook workbook1 = WorkbookFactory.create(new File(fileA));
Workbook workbook2 = WorkbookFactory.create(new File(fileB));

Наконец, убедитесь, что у вас есть все правильные банки в вашем пути к классам, см. Раздел "Компоненты и их зависимости" на веб-сайте POI для получения более подробной информации.

licensed under cc by-sa 3.0 with attribution.