Я разбираю файл excel, который содержит много дат, таких как 13-4-2021, и некоторые числа в этом формате 3,7%, 2,65%. Итак, я разбираю этот файл excel и получаю данные в строке для записи их в текстовом файле. Итак, моя проблема в том, что я получаю дату в виде целого числа, например 44299, хотя на самом деле она находится в формате 13.04.2021 на листе Excel. И еще один случай: у меня есть некоторые числа с процентом, например 3,7%, 2,65%, которые приходят как 3.6999999999999998E-2. Итак, я могу преобразовать число в дату, используя
SimpleDateFormat("MM/dd/yyyy").format(javaDate)
Вот код, который я использую
private static class SheetHandler extends DefaultHandler {
private SharedStringsTable sst;
private String lastContents;
private boolean nextIsString;
private int rowNumber;
private SheetHandler(SharedStringsTable sst) {
this.sst = sst;
}
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
try {
// row => row
if(name.equals("row")) {
if (attributes.getValue("r") != null) {
rowNumber = Integer.valueOf(attributes.getValue("r"));
} else {
rowNumber++;
}
//System.out.println("row: " + rowNumber);
}
if (rowNumber > 6) {
// c => cell
if(name.equals("c")) {
// Print the cell reference
//System.out.print(attributes.getValue("r") + " - ");
// Figure out if the value is an index in the SST
String cellType = attributes.getValue("t");
if(cellType != null && cellType.equals("s")) {
nextIsString = true;
} else {
nextIsString = false;
}
}
// Clear contents cache
lastContents = "";
}
}catch(Exception e) {
e.printStackTrace();
}
}
public void endElement(String uri, String localName, String name)
throws SAXException {
// Process the last contents as required.
// Do now, as characters() may be called more than once
if (rowNumber > 6) {
if(nextIsString) {
int idx = Integer.parseInt(lastContents);
lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString();
nextIsString = false;
}
// v => contents of a cell
// Output after we've seen the string contents
if(name.equals("v")) {
// System.out.println(lastContents);
if(!lastContents.isEmpty() ) // Here i am putting the values to a list to process
pickUpExcelValues.add(lastContents);
}
}
}
public void characters(char[] ch, int start, int length)
throws SAXException {
lastContents += new String(ch, start, length);
}
}
Но как я проверю, что строка содержит, скажем, 44299 дату? А также я понятия не имею, как преобразовать это 3,69999999999999998E-2 в 3,7% при записи в текстовый файл. Если у кого-нибудь есть какие-либо идеи, пожалуйста, помогите.