私はすべての列にフィルタを追加したExcelシートを持っています。私はapache POI JAVAを使用していくつかのフィルタの値を設定解除/設定したい。私は無駄に多くのことを試みました。どんな助けもありがとう。JAVAのapache POIを使用してExcelで列フィルタの値を設定/設定解除する方法は?
Unset few values in the following filter
Data Sheet
私はすべての列にフィルタを追加したExcelシートを持っています。私はapache POI JAVAを使用していくつかのフィルタの値を設定解除/設定したい。私は無駄に多くのことを試みました。どんな助けもありがとう。JAVAのapache POIを使用してExcelで列フィルタの値を設定/設定解除する方法は?
Unset few values in the following filter
Data Sheet
今これが唯一のapache poi
の下層低レベルのオブジェクトを使用して達成することができるまで。 AutoFilter
については、 org.openxmlformats.schemas.spreadsheetml.x2006.main.CTAutoFilterと後継者です。
例:Frequently Asked Questionsで述べたように
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTAutoFilter;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFilterColumn;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFilters;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCustomFilters;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCustomFilter;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFilterOperator;
import java.io.FileOutputStream;
class AutoFilterSetTest {
private static void setCellData(Sheet sheet) {
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Number");
cell = row.createCell(1);
cell.setCellValue("Alphabets");
for (int r = 1; r < 11; r++) {
row = sheet.createRow(r);
cell = row.createCell(0);
cell.setCellValue(r);
cell = row.createCell(1);
cell.setCellValue(new String(Character.toChars(64 + r)));
}
}
private static void setCriteriaFilter(XSSFSheet sheet, int colId, int firstRow, int lastRow, String[] criteria) throws Exception {
CTAutoFilter ctAutoFilter = sheet.getCTWorksheet().getAutoFilter();
CTFilterColumn ctFilterColumn = ctAutoFilter.addNewFilterColumn();
ctFilterColumn.setColId(colId);
CTFilters ctFilters = ctFilterColumn.addNewFilters();
for (int i = 0; i < criteria.length; i++) {
ctFilters.addNewFilter().setVal(criteria[i]);
}
//hiding the rows not matching the criterias
DataFormatter dataformatter = new DataFormatter();
for (int r = firstRow; r <= lastRow; r++) {
XSSFRow row = sheet.getRow(r);
boolean hidden = true;
for (int i = 0; i < criteria.length; i++) {
String cellValue = dataformatter.formatCellValue(row.getCell(colId));
if (criteria[i].equals(cellValue)) hidden = false;
}
if (hidden) row.getCTRow().setHidden(hidden);
}
}
public static void main(String[] args) throws Exception {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet();
//create rows of data
setCellData(sheet);
for (int c = 0; c < 2; c++) sheet.autoSizeColumn(c);
int lastRow = sheet.getLastRowNum();
XSSFAutoFilter autofilter = sheet.setAutoFilter(new CellRangeAddress(0, lastRow, 0, 1));
//XSSFAutoFilter is useless until now
setCriteriaFilter(sheet, 0, 1, lastRow, new String[]{"2", "4", "7"});
wb.write(new FileOutputStream("AutoFilterSetTest.xlsx"));
wb.close();
}
}
このコードは、スキーマooxml-schemas-1.3.jar
のすべての完全なjarファイルを必要とします。これは、低レベルのorg.openxmlformats.schemas.spreadsheetml.x2006.main.CT*Filter*
クラスは、デフォルトでapache poi
と一緒に出荷される小さいに含まれていないためです。
ありがとう!それは正常に動作しますが、それは最新のpoiバージョンでのみ利用可能ですが、私は推測します。 –
@Parthenophobic Sallu:いいえ。このコードでは、[Frequently Asked Questions](https://poi.apache.org/faq.html#)で説明したように、すべてのスキーマooxml-schemas-1.3.jarの完全なjarが必要です。 faq-N10025)。 –
ありがとうございます。完璧に動作します。また、なぜ低レベルのオブジェクトを使用するのが良い方法ではないのかを知りたかったのですが? –
コードを投稿する必要があります。 –
もし私がそれについて考えていたら、私はやっただろう。私はExcelファイルを読み書きすることはできますが。私が投稿できる関連コードはありませんでした。 –