В дополнение к ответу @ Khanetor для тех, кто работает с запросами на перекрестный поиск: credentials: 'include'
Пример запроса выборки JSON:
fetch(url, {
method: 'GET',
credentials: 'include'
})
.then((response) => response.json())
.then((json) => {
console.log('Gotcha');
}).catch((err) => {
console.log(err);
});
https : //developer.mozilla.org/en-US/docs/Web/API/Request/credentials
Вы можете получить значение как String, используя формат, определенный для этой ячейки:
final DataFormatter df = new DataFormatter();
final XSSFCell cell = row.getCell(cellIndex);
String valueAsString = df.formatCellValue(cell);
Благодаря этот ответ .
Я также получил эту ошибку с POI версии 3.12. Я думаю, что ошибка зарегистрирована там: https://bz.apache.org/bugzilla/show_bug.cgi?id=56702 , и я добавил комментарий там с моим анализом.
Вот обходной путь, который я использовал: Исключение было поднято HSSFCell.getNumericCellValue, которое было вызвано DateUtil.isCellDateFormatted. DateUtil.isCellDateFormatted делает 2 вещи: 1) проверьте тип значения ячейки, вызвав HSSFCell.getNumericCellValue, а затем DateUtil.isValidExcelDate (), что, по-моему, почти бессмысленно. 2) проверьте, является ли формат ячейки форматом даты
Я скопировал код раздела 2) выше в новой функции «myIsADateFormat» и использовал его вместо DateUtil.isCellDateFormatted (это довольно грязно копировать библиотечный код, но он работает ...):
private boolean myIsADateFormat(Cell cell){
CellStyle style = cell.getCellStyle();
if(style == null) return false;
int formatNo = style.getDataFormat();
String formatString = style.getDataFormatString();
boolean result = DateUtil.isADateFormat(formatNo, formatString);
return result;
}
Если вам нужно сначала проверить тип значения, вы также можете использовать это:
CellValue cellValue = evaluator.evaluate(cell);
int cellValueType = cellValue.getCellType();
if(cellValueType == Cell.CELL_TYPE_NUMERIC){
if(myIsADateFormat(cell){
....
}
}
Решение Рави работает: просто используйте cell.setCellType (1); перед чтением значения ячейки и всегда получать ее как строку, после чего вы можете использовать ее в своем собственном формате (тип).
Документация ясно говорит, что вместо setCellType в 1 вместо 1 использовать DataFormatter, как объяснил Тьерри:
https://poi.apache.org/apidocs/org/apache/poi/ss /usermodel/Cell.html#setCellType(int)
Use This as reference
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
System.out.println();
}
Используйте приведенный ниже код для чтения любого типа данных из xcels с помощью poi.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
*
* @author nirmal
*/
public class ReadWriteExcel {
public static void main(String ar[]) {
ReadWriteExcel rw = new ReadWriteExcel();
rw.readDataFromExcel();
}
Object[][] data = null;
public File getFile() throws FileNotFoundException {
File here = new File("test/com/javaant/ssg/tests/test/data.xlsx");
return new File(here.getAbsolutePath());
}
public Object[][] readDataFromExcel() {
final DataFormatter df = new DataFormatter();
try {
FileInputStream file = new FileInputStream(getFile());
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
int rownum = 0;
int colnum = 0;
Row r=rowIterator.next();
int rowcount=sheet.getLastRowNum();
int colcount=r.getPhysicalNumberOfCells();
data = new Object[rowcount][colcount];
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
colnum = 0;
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
data[rownum][colnum] = df.formatCellValue(cell);
System.out.print(df.formatCellValue(cell));
colnum++;
System.out.println("-");
}
rownum++;
System.out.println("");
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
}
Просто используйте cell.setCellType (1); перед чтением значения ячейки и всегда получать его как String, после чего вы можете использовать его в своем собственном формате (тип).
Ravi