Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java在Excel中的给定占位符之间进行迭代_Java_Excel_Spring_Spring Boot_Apache Poi - Fatal编程技术网

使用Java在Excel中的给定占位符之间进行迭代

使用Java在Excel中的给定占位符之间进行迭代,java,excel,spring,spring-boot,apache-poi,Java,Excel,Spring,Spring Boot,Apache Poi,下面是我想做的一个例子: 有没有办法输出startprint和end_print之间的所有单元格,我在excel中有3张相同的表格,我只想查看startprint和endprint之间的数据,因为现在我所能做的就是打印出3张包含所有内容的表格,下面是我的代码: 公共类读取发票{ 私有静态最终字符串NAME=“C:\\Users\\\\\\\\\excelfile.xlsx”; 公共静态void main(字符串[]args){ 试一试{ FileInputStream文件=新FileInput

下面是我想做的一个例子:

有没有办法输出startprint和end_print之间的所有单元格,我在excel中有3张相同的表格,我只想查看startprint和endprint之间的数据,因为现在我所能做的就是打印出3张包含所有内容的表格,下面是我的代码:

公共类读取发票{
私有静态最终字符串NAME=“C:\\Users\\\\\\\\\excelfile.xlsx”;
公共静态void main(字符串[]args){
试一试{
FileInputStream文件=新FileInputStream(新文件(名称));
工作簿=新的XSSF工作簿(文件);
DataFormatter DataFormatter=新的DataFormatter();
迭代器sheets=workbook.sheetIterator();
while(sheets.hasNext()){
Sheet sh=sheets.next();
System.out.println(“图纸名称为”+sh.getSheetName());
System.out.println(“-----------”);
迭代器迭代器=sh.Iterator();
while(iterator.hasNext()){
Row=iterator.next();
迭代器cellIterator=row.Iterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
字符串cellValue=dataFormatter.formatCellValue(单元格);
系统输出打印(cellValue+“\t”);
}
System.out.println();
}
}
workbook.close();
}
捕获(例外e){
e、 printStackTrace();
}
}
}

我没有电子表格来测试这段代码

processLines
方法测试开始打印行和结束打印行。当我们在开始打印和结束打印行之间时,我们打印行

我不确定这句话是否正确。我想从A列拿到手机

String text = row.getColumnObject(0);
编辑:也许这会有用

Iterator<Cell> cellIterator = row.iterator();
Cell cell = cellIterator.next();
String text = dataFormatter.formatCellValue(cell);
Iterator cellIterator=row.Iterator();
Cell=cellIterator.next();
字符串文本=dataFormatter.formatCellValue(单元格);
下面是示例代码

public class ReadInvoices {

    private static final String NAME = "C:\\Users\\.......\excelfilename.xlsx";

    public static void main(String[] args) {
        try {
            FileInputStream file = new FileInputStream(new File(NAME));
            Workbook workbook = new XSSFWorkbook(file);
            DataFormatter dataFormatter = new DataFormatter();
            Iterator<Sheet> sheets = workbook.sheetIterator();
            while (sheets.hasNext()) {
                Sheet sh = sheets.next();
                System.out.println("Sheet name is " + sh.getSheetName());
                System.out.println("---------");
                processLines(dataFormatter, sh);
            }
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void processLines(DataFormatter dataFormatter, Sheet sh) {
        boolean printLine = false;
        Iterator<Row> iterator = sh.iterator();
        while (iterator.hasNext()) {
            Row row = iterator.next();
            
            Iterator<Cell> cellIterator = row.iterator();
            Cell cell = cellIterator.next();
            String text = dataFormatter.formatCellValue(cell);

            if (printLine && text.equals("End_print")) {
                printLine = false;
            }
            
            if (printLine) {
                printRow(dataFormatter, row);
            } 
            
            if (!printLine && text.equals("StartPrint")) {
                printLine = true;
            }
        }
    }
    
    private static void printRow(DataFormatter dataFormatter, Row row) {
        Iterator<Cell> cellIterator = row.iterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            String cellValue = dataFormatter.formatCellValue(cell);

            System.out.print(cellValue + "\t");
        }
        System.out.println();
    }

}
公共类读取发票{
私有静态最终字符串NAME=“C:\\Users\\\.\excelfilename.xlsx”;
公共静态void main(字符串[]args){
试一试{
FileInputStream文件=新FileInputStream(新文件(名称));
工作簿=新的XSSF工作簿(文件);
DataFormatter DataFormatter=新的DataFormatter();
迭代器sheets=workbook.sheetIterator();
while(sheets.hasNext()){
Sheet sh=sheets.next();
System.out.println(“图纸名称为”+sh.getSheetName());
System.out.println(“-----------”);
处理行(数据格式化程序,sh);
}
workbook.close();
}捕获(例外e){
e、 printStackTrace();
}
}
专用静态void处理行(DataFormatter DataFormatter,工作表sh){
布尔printLine=false;
迭代器迭代器=sh.Iterator();
while(iterator.hasNext()){
Row=iterator.next();
迭代器cellIterator=row.Iterator();
Cell=cellIterator.next();
字符串文本=dataFormatter.formatCellValue(单元格);
if(printLine和text.equals(“End_print”)){
printLine=false;
}
如果(打印行){
printRow(数据格式化程序,行);
} 
如果(!printLine&&text.equals(“StartPrint”)){
printLine=true;
}
}
}
私有静态void printRow(DataFormatter DataFormatter,Row-Row){
迭代器cellIterator=row.Iterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
字符串cellValue=dataFormatter.formatCellValue(单元格);
系统输出打印(cellValue+“\t”);
}
System.out.println();
}
}

单元格中的“OK”值表示什么?第27h单元格中缺少的“OK”有什么意义吗?OK没有任何意义,我只想打印占位符之间的所有单元格。非常感谢您的回答。。但是getColumnObject(0);给了我错误,我一直在寻找如何解决它。如果您知道任何方法,请让我知道,再次感谢。这是excel文件:您知道为什么它不能使用此excel文件吗?它给了我这个错误:java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1209)处的java.util.NoSuchElementException