使用Java在Excel中的给定占位符之间进行迭代
下面是我想做的一个例子: 有没有办法输出startprint和end_print之间的所有单元格,我在excel中有3张相同的表格,我只想查看startprint和endprint之间的数据,因为现在我所能做的就是打印出3张包含所有内容的表格,下面是我的代码:使用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
公共类读取发票{
私有静态最终字符串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