使用Apache POI在受保护的工作表中启用筛选和排序

时间:2018-05-03 12:33:18

标签: java excel apache-poi

我创建了一个带有受保护工作表的工作簿,因为我只需要很少的列可编辑。虽然我想让用户能够对列进行排序和过滤。

谷歌搜索已经让我失望了。任何形式的帮助将不胜感激。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果是import java.util.*; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.dataformat.xml.*; public class XMLTest { public static void main(String[] args) { String input = "<TransactionList>\n" + " <Transaction type=\"C\" amount=\"1000\" narration=\"salary\" />\n" + " <Transaction type=\"X\" amount=\"400\" narration=\"rent\"/>\n" + " <Transaction type=\"D\" amount=\"750\" narration=\"other\"/>\n" + "</TransactionList>"; try { XmlMapper xmlMapper = new XmlMapper(); xmlMapper.setDefaultUseWrapper(false); // this is how we tell Jackson the target type of the deserialization JavaType transactionListType = xmlMapper.getTypeFactory().constructCollectionType(List.class, Transaction.class); List<Transaction> transactionList = xmlMapper.readValue(input, transactionListType ); System.out.println(transactionList); } catch (Exception e) { e.printStackTrace(); } } public static class Transaction { public String type; public int amount; public String narration; @Override public String toString() { return String.format("{ type:%s, amount:%d, narration:%s }", type, amount, narration); } } } ,则XSSFSheet.lockAutoFilter(false)XSSFSheet.lockSort(false)将设置在受保护的工作表中启用自动过滤和排序的属性。

当然必须在保护纸张之前设置自动过滤器本身。设置XSSFSheet仅在受保护的工作表中启用用途自动过滤器。

对于使用排序,必须设置一个允许用户编辑的范围。这是因为虽然排序单元格的值会有所改变,因为行的内容以及排序中所有单元格的内容可能必须在排序时进行交换。

lockAutoFilter(false) GUI中,这是通过Excel - &gt;进行的。 Review tab。在Allow Users to Edit Ranges中,我们必须向CTProtectedRange添加CTWorksheet

注意apache poi的使用需要faq-N10025中提到的所有模式CTProtectedRange的完整jar。

完整示例:

ooxml-schemas-1.3.jar