0
私はPOIでセルをマージするプログラムを書いています。私はそれらをマージすることができます。数値の列を持つ列があり、この列を結合するときにシートを開き、この列を選択すると驚いたことに、この列が合計されていないかのようにカウントと合計が表示されます。POIを使ったマージとの混同
以下は私のExcelです。ここで
count
は5
とsum
あるべき530
ことが、25
と2650
が私のコードであるとして、これはこのことを示していなければなりません。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
public class RowsMerge {
// public static void main(String[] args)
public static void main(String[] args) throws IOException {
FileInputStream fin = new FileInputStream(
new File("C:\\D\\Sheets\\Quality Sheet\\Quality_template.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(fin);
HSSFSheet sheet = workbook.getSheetAt(0);
int row = sheet.getPhysicalNumberOfRows();
String currentLawName, currentCountry, currentAssociate, previousLawName, previousCountry, previousAssociate;
String currentPages, previousPages;
int startIndex = 1, finalIndex = 0;
System.out.println(row);
for (int i = 2; i < row; i++) {
currentAssociate = sheet.getRow(i).getCell(1).toString();
currentLawName = sheet.getRow(i).getCell(3).toString();
currentCountry = sheet.getRow(i).getCell(4).toString();
currentPages = sheet.getRow(i).getCell(5).toString();
previousAssociate = sheet.getRow(i - 1).getCell(1).toString();
previousLawName = sheet.getRow(i - 1).getCell(3).toString();
previousCountry = sheet.getRow(i - 1).getCell(4).toString();
previousPages = sheet.getRow(i - 1).getCell(5).toString();
if (currentAssociate.equals(previousAssociate) && currentCountry.equals(previousCountry)
&& currentLawName.equals(previousLawName) && currentPages.equals(previousPages)) {
finalIndex += 1;
if (((i + 1) == row)) {
System.out.println("yes");
finalIndex += 1;
sendRangeToMergeCells(startIndex + 1, finalIndex - 1, sheet, workbook);
}
} else {
sendRangeToMergeCells(startIndex + 1, finalIndex, sheet, workbook);
startIndex = i;
finalIndex = 0;
}
}
FileOutputStream fileOut = new FileOutputStream("C:\\D\\Sheets\\Quality Sheet\\new.xls");
workbook.write(fileOut);
fileOut.close();
}
private static void sendRangeToMergeCells(int startIndex, int finalIndex, HSSFSheet sheet, HSSFWorkbook workbook) {
System.out.println(startIndex + "\t" + (startIndex + finalIndex));
CellRangeAddress region = CellRangeAddress.valueOf("F" + (startIndex) + ":F" + ((startIndex + finalIndex)));
sheet.addMergedRegion(region);
}
}
これはかなり混乱しています。どこに間違っているのか、どうすればいいのか教えてください。
おかげ
これはバグかもしれません。 Excelは、マージされた領域の左上のセルにのみ値を保持します。 POIはすべての値を保持しているようです。この問題をhttps://bz.apache.org/bugzilla/buglist.cgi?list_id=146416&product=POIでお知らせください。問題を再現するのに必要な最小限のコードを含めてください。 – jmarkmurphy