当前位置: 首页 > 知识库问答 >
问题:

Excel中的Outputdata无法在SpringBoot中正确迭代

许涵容
2023-03-14

所以我试着在springboot中读取一个excel文件,该excel文件包含10张表,代码成功地迭代了所有的表,但是行标题和单元格数据不正确,除了第一张表,即第二张到最后一张表都取了第一张表的信息

还有输出没有很好的安排,有没有一个方法让它干净

下面是代码

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;


@RestController
@RequestMapping("datafile")
public class DataController {

    @RequestMapping(value = "getdata", method = RequestMethod.GET)
    public void createBus() throws IOException {


        final String SAMPLE_XLSX_FILE_PATH = "C:\\project\\transita\\src\\main\\resources\\transita.xlsx";


        // Creating a Workbook from an Excel file (.xls or .xlsx)
        Workbook workbook;

        {
            try {
                workbook = WorkbookFactory.create(new File(SAMPLE_XLSX_FILE_PATH));



                // Retrieving the number of sheets in the Workbook
                System.out.println("Workbook has " + workbook.getNumberOfSheets() + " Sheets : ");





                Iterator<Sheet> sheetIterator = workbook.sheetIterator();
                System.out.println("Retrieving Sheets using Iterator");
                while (sheetIterator.hasNext()) {
                    Sheet sheet = sheetIterator.next();
                    System.out.println("=> " + sheet.getSheetName());

                    sheet = workbook.getSheetAt(0);

                    // Create a DataFormatter to format and get each cell's value as String
                    DataFormatter dataFormatter = new DataFormatter();

                    // 1. You can obtain a rowIterator and columnIterator and iterate over them
                    System.out.println("\n\nIterating over Rows and Columns using Iterator\n");
                    Iterator<Row> rowIterator = sheet.iterator();
                    while (rowIterator.hasNext()) {
                        Row row = rowIterator.next();

                        // Now let's iterate over the columns of the current row
                        Iterator<Cell> cellIterator = row.cellIterator();

                        while (cellIterator.hasNext()) {
                            Cell cell = cellIterator.next();
                            String cellValue = dataFormatter.formatCellValue(cell);
                            System.out.print(cellValue + "\t");
                        }
                        System.out.println();
                    }

                    try {
                        workbook.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InvalidFormatException e) {
                e.printStackTrace();
            }
        }

    }

下面是输出的第1页=>partners

使用迭代器迭代行和列

partner_id  partner_code    partner_name    partner_logo    partner_address partner_telephone   partner_email   partner_website External    Agency Oportunity   Search  sell    partner_id  
001 ABC ABC Transport       Km 5 MCC Uratta Rd, Owerri, Imo State -1111 2348139862090, 0700222872678    info@abctransport.com   https://www.abctransport.com    TRUE    TRUE    FALSE   FALSE   A4  
002 CHT Chisco Transport Ltd        104, Funsho Williams Avenue, Iponri, Surulere, .    0816517669, 08089273799, 08113798985    Customercare@chiscogroupng.com  https://www.chiscotransport.com.ng  TRUE    TRUE    FALSE   FALSE   A5  
003 LIB Libra Motors NIgeria Ltd        Cele Okota Road
Lagos Nigeria   09031565022 info@libmot.com www.libmot.com  TRUE    TRUE    FALSE   FALSE   A6  
004 GIG GIGM Ltd        20 Ikorodu Express Road, Jibowu, Lagos.  08139851110    contact@gigm.com.   https://gigm.com/   TRUE    FALSE   FALSE   FALSE       A7  
005 GUO GUO     Jibowu street along ikorodu express, Jibowu, Lagos. 2348144988273   info@guotransport.com   https://www.guotransport.com    TRUE    FALSE   FALSE   FALSE   A8  
partner_id  partner_code    partner_name    partner_logo    partner_address partner_telephone   partner_email   partner_website External    Agency Oportunity   Search  sell    partner_id  
001 ABC ABC Transport       Km 5 MCC Uratta Rd, Owerri, Imo State -1111 2348139862090, 0700222872678    info@abctransport.com   https://www.abctransport.com    TRUE    TRUE    FALSE   FALSE   A4  
002 CHT Chisco Transport Ltd        104, Funsho Williams Avenue, Iponri, Surulere.  0816517669, 08089273799, 08113798985    Customercare@chiscogroupng.com  https://www.chiscotransport.com.ng  TRUE    TRUE    FALSE   FALSE   A5  
003 LIB Libra Motors NIgeria Ltd        Cele Okota Road
Lagos Nigeria   09031565022 info@libmot.com www.libmot.com  TRUE    TRUE    FALSE   FALSE   A6  
004 GIG GIGM Ltd        20 Ikorodu Express Road, Jibowu, Lagos.  08139851110    contact@gigm.com.   https://gigm.com/   TRUE    FALSE   FALSE   FALSE       A7  
005 GUO GUO     Jibowu street along ikorodu express, Jibowu, Lagos. 2348144988273   info@guotransport.com   https://www.guotransport.com    TRUE    FALSE   FALSE   FALSE   A8  

第3页=>附表

使用迭代器迭代行和列

partner_id  partner_code    partner_name    partner_logo    partner_address partner_telephone   partner_email   partner_website External    Agency Oportunity   Search  sell    partner_id  
001 ABC ABC Transport       Km 5 MCC Uratta Rd, Owerri, Imo State -1111 2348139862090, 0700222872678    info@abctransport.com   https://www.abctransport.com    TRUE    TRUE    FALSE   FALSE   A4  
002 CHT Chisco Transport Ltd        104, Funsho Williams Avenue, Iponri, Surulere, L.   0816517669, 08089273799, 08113798985    Customercare@chiscogroupng.com  https://www.chiscotransport.com.ng  TRUE    TRUE    FALSE   FALSE   A5  
003 LIB Libra Motors NIgeria Ltd        Cele Okota Road
Lagos Nigeria   09031565022 info@libmot.com www.libmot.com  TRUE    TRUE    FALSE   FALSE   A6  
004 GIG GIGM Ltd        20 Ikorodu Express Road, Jibowu, Lagos.  08139851110    contact@gigm.com.   https://gigm.com/   TRUE    FALSE   FALSE   FALSE       A7  
005 GUO GUO     Jibowu street along ikorodu express, Jibowu, Lagos. 2348144988273   info@guotransport.com   https://www.guotransport.com    TRUE    FALSE   FALSE   FALSE   A8  


                                        
                                                
                                                
                                

共有1个答案

鱼锦
2023-03-14

问题出在您发布的代码的第一部分,即:

// ...other stuff...

Iterator<Sheet> sheetIterator = workbook.sheetIterator();
System.out.println("Retrieving Sheets using Iterator");
while (sheetIterator.hasNext()) {
     Sheet sheet = sheetIterator.next();
     System.out.println("=> " + sheet.getSheetName());

     sheet = workbook.getSheetAt(0);

     // Create a DataFormatter to format and get each cell's value as String
     DataFormatter dataFormatter = new DataFormatter();

// ...other stuff...

您正在正确地使用工作表迭代器,在使用以下行的同时,从迭代器的开头检索一个新的工作表:

Sheet sheet = sheetIterator.next();

但是,很奇怪的是,您正在重写。迭代器为您提供索引为零的(这是工作簿的第一个表),其中显示了代码行:

sheet = workbook.getSheetAt(0);

当然,您的while-loop实际上总是迭代工作簿的第一个工作表(索引为零的工作表)。去掉那条坏的坏线,问题就解决了:

// ...other stuff...

Iterator<Sheet> sheetIterator = workbook.sheetIterator();
System.out.println("Retrieving Sheets using Iterator");
while (sheetIterator.hasNext()) {
     Sheet sheet = sheetIterator.next();
     System.out.println("=> " + sheet.getSheetName());

     // sheet = workbook.getSheetAt(0); <-- BAD, BAD LINE!

     // Create a DataFormatter to format and get each cell's value as String
     DataFormatter dataFormatter = new DataFormatter();

// ...other stuff...
 类似资料:
  • 我是Android Studio和Firebase的新手,我很难从Firebase实时数据库中检索特定的键值。 因此,我在 firebase 实时数据库中有一个用户数组,我想循环访问整个数组,但是每次按下“下一步”按钮直到数组结束时,我都会“移动”一次迭代器。 它不是静态的,即数组的大小可以改变。 当我移动迭代器时(当我按下按钮时),我想从firebase实时数据库中为该用户获取“状态”消息(当我

  • 问题内容: 我目前正在使用HtmlUnit开发一些测试。它正在加载一个包含braintree.js(其表单加密库)的页面。我跑了一堆,但我被困在所谓的加密货币上。有问题的JS是: HtmlUnit抛出: 我想HtmlUnit不包含加密。我自己可以包括一个密码库吗? 问题答案: 根据您的评论,我不得不告诉您HtmlUnit在涉及JavaScript时令人不安。它将抱怨很多关于变量未定义和未知函数等问

  • 我有一个扩展测试数据文件(excel/csv)。 我的需求在我的jmx树中,我的第一个http请求应该从ContentName列中获取值,例如:www.sample${ContentName}我需要将JsonPathExtractorApi列作为jp@gc-JSON路径提取器。 请不要说我只需要一个json路径提取器,需要${JsonPathExtractorApi}。对于酒店,我需要提取4次,对

  • 我在使用Swagger coode en plugnin生成类时遇到了一个问题。插件无法为某些模型类中的某些字段生成正确的日期格式。LocalDate被翻译成org.joda.time.LocalDate而不是java.time.LocalDate。 这是我在pom中的插件配置。xml: 我已经尝试添加这两个配置: 但没有成功。 我还添加了以下内容: 同样的结果... 以下是导入错误的生成模型类:

  • 问题内容: 我做了一个灵活的布局,其中四个列/框并排放置在父div中。我添加了一个980px的媒体查询,该查询增加了列的宽度,并添加了一个flex- wrap来将两个右手列推到新行上,从而创建2 x 2样式的布局。这适用于除Safari之外的所有浏览器,在Safari中,结果非常不可预测。 如果您在Chrome浏览器中查看此内容并将窗口拖到980px以下,它将按照我上面所述的方式工作。但是,在Sa

  • 问题内容: 我有一个非常棘手的问题,我希望有人能对此有所启发。我正在使用Jquery从另一个网站(我拥有)检索Http响应。收到DOM后,我将对其进行解析以获取某些信息。但是,当我尝试获取链接的href属性时,IE会将本地域添加到href的开头! 这是我的代码: 我的变量PageLink应该是“ /pages/getThisPage.aspx?id=8347”。但是,它将作为“ http://my