作为Selenium自动化的一部分,我们需要读取Excel(Apache POI和xls格式文件,HSSF)文件,其中包含STRING FORMULA和INTEGER FORMULA单元格、Date值、NUMERIC以及STRING单元格。
当尝试以下方法时,面临DateFormat需要更新为(yyyyy-mm-dd)的问题,但是它以dd/mm/yy的格式给出。NUMERIC值也被读取为STRING。
我们定义了一个返回字符串的方法,以便读取值并将其传递给JSON负载。
public static String getData(String strSheetName, String strColumnIdentifier, int strRowIdentifier) throws IOException {
String strAbsFilePath = getAbsolutePath("testdata" + File.separator + "New.xls");
FileInputStream fis = new FileInputStream(strAbsFilePath);
workbook = new HSSFWorkbook(fis);
fis.close();
sheet = workbook.getSheet(strSheetName);
row = sheet.getRow(3);//// Making the object of excel row
DataFormatter formatter = new DataFormatter();
int col_Num = -1;
for (int i = 0; i < row.getLastCellNum(); i++) {
if (row.getCell(i).getStringCellValue().trim().equals(strColumnIdentifier.trim()))
col_Num = i;
}
if (col_Num == -1)
return "";
row = sheet.getRow(strRowIdentifier);
if (row == null)
return "";
cell = row.getCell(col_Num);
formatter.formatCellValue(cell);
if(cell.getCellType() == CellType.FORMULA) {
PrintStream text = null;
switch(cell.getCachedFormulaResultType()) {
case STRING:
HSSFRichTextString str = cell.getRichStringCellValue();
if(str != null && str.length() > 0) {
String cellValue = str.toString();
return cellValue;
}
break;
case NUMERIC:
HSSFCellStyle style = cell.getCellStyle();
if(style == null) {
text.append( (char) cell.getNumericCellValue() );
} else {
// cell.setCellType(CellType.NUMERIC);
short df = workbook.createDataFormat().getFormat("dd/mm/yyy");
// style.setDataFormat(df);
// cell.setCellStyle(style);
DateFormat datetemp = new SimpleDateFormat("dd/mm/yyy");
Date date = cell.getDateCellValue();
String cellValue1 = datetemp.format(date);
//style.setDataFormat(df);//If used this, all Numeric cell values are set to date format
cellValue1=formatter.formatRawCellContents(
cell.getNumericCellValue(),
style.getDataFormat(),
style.getDataFormatString()
);
return cellValue1;
}
break;
case BOOLEAN:
cell.getBooleanCellValue();
}
}
String cellStringValue = formatter.formatCellValue(cell);
return cellStringValue;
}
输出:
stringFieldValue value is: TestingExcelCell //Correctly getting as String
IntFieldValue value is: 11 //It is going as String in the Payload
ReportDate value is: 6/7/19 //This should come in the format of yyyy-mm-dd
请建议是否需要以yyyy-mm-dd格式而不是dd/mm/yy格式获取日期格式,并将整数值作为整数而不是字符串(11)。
问题是检查单元格是否为dateformat,然后设置日期格式,在对条件进行以下更改后,能够以预期格式获取值。谢谢大家的支持。
case NUMERIC:
// HSSFCellStyle style = cell.getCellStyle();
CellStyle style = cell.getCellStyle();
if(style == null) {
cell.getNumericCellValue();
//text.append( (char) cell.getNumericCellValue() );
} else if(DateUtil.isCellDateFormatted(cell)) {
cell.setCellStyle(style);
SimpleDateFormat datetemp = new SimpleDateFormat("yyyy-MM-dd");
//String formattedCell = datetemp.format(cell.getDateCellValue());
Date date = cell.getDateCellValue();
String formattedCell = datetemp.format(date);
return formattedCell;
}
我正在开发一个上传excel文件并将其值插入数据库的应用程序。 我的代码如下: 所以当我上传一个像下面这样的excel文件时,它会工作并将其数据插入db。 但是,当我上传像以下这样的excel文件时,db不会更新。 我可以问你如何解决这个问题,所以即使单元格的值是=ROUNDUP((600),2),而不是600,它仍然更新db。 提前谢谢你。
我的C#. Net应用程序通过使用excel公式字符串加载和读取excel工作表单元格值。 例如,excel工作表位置和选项卡名称及其单元格行/列将作为公式字符串提供。 'D:\DataX[数据.Xls]EOD'$A5级 根据上述公式-C#应用程序加载数据。Xls,并打开EOD选项卡,应读取第5行A列值。 寻找在C#中完成的最佳方式。Net框架。
#我正在用ApachePOI读取excel文件。无法读取日期。在excel中,日期格式2017-03-15 6:00(单元格格式=自定义)
问题内容: 我必须将 算法从Excel工作表移植到python代码, 但必须对 Excel文件中的算法 进行 反向工程 。 Excel工作表非常复杂,它包含许多单元格,在这些单元格中有引用其他单元格的公式(也可以包含公式或常数)。 我的想法是使用python脚本分析工作表,以构建一种单元格之间的依存关系表,即: A1取决于B4,C5,E7公式:“ = sqrt(B4)+ C5 * E7” A2取决
我有Excel日期格式的单元格为: MM-DD-YYYY HH: MM 我需要使用apache poi获取相同的格式,而不考虑excel中给定的任何格式 有人能帮忙吗?
我正在使用apache POI更改excel表中的单元格。更改值后,与已更改的单元格对应的公式的单元格不会更新。 当我进入excel并单击带有公式的单元格,然后在函数栏中单击时,公式会更新。 A1仍然等于3,直到我点击那个单元格。 刷新工作簿或工作表也不起作用。这是excel或POI的问题吗?有人能想出一个变通办法吗?