我需要从Excel表中读取数据,并需要将数据转换为键值对。
我已经写了下面的代码。
这是我的代码:
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class XLSXReaderExample {
public static void main(String[] args) {
try {
File file = new File("C:\\demo\\employee.xlsx"); //creating a new file instance
FileInputStream fis = new FileInputStream(file); //obtaining bytes from the file
//creating Workbook instance that refers to .xlsx file
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0); //creating a Sheet object to retrieve object
Iterator<Row> itr = sheet.iterator(); //iterating over excel file
while (itr.hasNext()){
Row row = itr.next();
Iterator<Cell> cellIterator = row.cellIterator(); //iterating over each column
while (cellIterator.hasNext()){
Cell cell = cellIterator.next();
switch (cell.getCellType()){
case Cell.CELL_TYPE_STRING: //field that represents string cell type
System.out.print(cell.getStringCellValue() + "\t\t\t");
break;
case Cell.CELL_TYPE_NUMERIC: //field that represents number cell type
System.out.print(cell.getNumericCellValue() + "\t\t\t");
break;
case Cell.CELL_TYPE_Date: //field that represents Date cell type
System.out.print(cell.getDateCellValue() + "\t\t\t");
break;
default:
}
}
System.out.println("");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
我得到的结果如下:
Employee ID Employee Name Salary Designation Department
1223.0 Harsh Marketing Manager Marketing
3213.0 Vivek 15000.0 Financial Advisor Finance
然而,我需要的输出,所有的头列应该来在映射键和相应的数据应该作为值。
我需要将我的数据设置为如下格式,请帮助<代码>地图
正如在comment中所写的,因为您无法知道单元格是否包含标题值或数据值,所以您不可能想做什么。
乍一看,你有两种方法来实现你的目标:
编辑:
您添加了一条注释,确认标题始终位于第一行,并且文件中只有一个表,所以下一个代码应该可以工作。
public static void main(String[] args) {
try {
File file = new File("C:\\demo\\employee.xlsx"); //creating a new file instance
FileInputStream fis = new FileInputStream(file); //obtaining bytes from the file
//creating Workbook instance that refers to .xlsx file
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0); //creating a Sheet object to retrieve object
Iterator<Row> itr = sheet.iterator(); //iterating over excel file
// CAREFUL HERE! use LinkedHashMap to guarantee the insertion order!
Map<String, List<String>> myMap = new LinkedHashMap<>();
// populate map with headers and empty list
if (itr.hasNext()) {
Row row = itr.next();
Iterator<Cell> headerIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
myMap.put(getCellValue(cell), new ArrayList<>());
}
}
Iterator<List<String>> columnsIterator;
// populate lists
while (itr.hasNext()) {
// get the list iterator every row to start from first list
columnsIterator = myMap.values().iterator();
Row row = itr.next();
Iterator<Cell> cellIterator = row.cellIterator(); //iterating over each column
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
// here don't check hasNext() because if the file not contains problems
// the # of columns is same as # of headers
columnsIterator.next().add(getCellValue(cell));
}
}
// here your map should be filled with data as expected
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getCellValue(Cell cell) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING: //field that represents string cell type
return cell.getStringCellValue() + "\t\t\t";
case Cell.CELL_TYPE_NUMERIC: //field that represents number cell type
return cell.getNumericCellValue() + "\t\t\t";
case Cell.CELL_TYPE_Date: //field that represents Date cell type
return cell.getDateCellValue() + "\t\t\t";
default:
return "";
}
}
我正在使用云Firestore作为我的Ionic/Cordova应用程序的数据库。 我的问题是试图从Firestore数据库中“获取”存储的数据,并在我的“计算函数”中使用它们。 我在Firestore中的数据库结构如下: 我当前的代码能够从Firestore中检索/获取数据,但是我还不能利用这些数据,因为我找不到这样做的方法。 获取数据功能:
下面是一些示例代码:
我有地图的RDD,我想把它转换成数据帧,这里是RDD的输入格式 有没有办法转换成数据帧像 df.show
问题内容: 我希望从该网站的mma 数据中抓取数据并解析一些highcharts表。我单击的链接与selenium,然后切换到图表。我转到该站点,然后在Artem Lobov行的Pinnacle列中单击+420。这将创建一个弹出图表。然后,我切换到活动元素。我想捕获由highcharts绘制的图形以响应点击。 我以以下方式使用selenium: 我能够单击链接并获得图表,但我对highcharts
2.Select query返回具有正确结构的JSON以转换为pojo 在mysql shell上执行查询将返回预期的JSON: 在camel中运行查询时,我遇到了一个问题,对此我无法找到解释或解决方案。 null 提前致谢
我正在尝试从位于的文件导入数据https://drive.google.com/file/d/1leOUk4Z5xp9tTiFLpxgk_7KBv3xwn5eW/view进入数据帧。我试过使用 但是我得到一个错误说"ParserError:错误标记化数据。C错误:期望在行231中有9个字段,看到10"我不想使用'error_bad_lines=False'并跳过数据行。 请帮忙。