所以我试着在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
问题出在您发布的代码的第一部分,即:
// ...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