0
我正在使用Apache POI 3.6,我試圖從Excel中讀取數據並將Excel數據轉換爲.CVS文件。 我Excel中的數據將在此格式同時將excel轉換爲.csv文件我無法轉換日期並將其保存在csv文件中?
- 第一列是:日期(8/6/2009)
- 第二列是:時間(上午12時00分01秒)
- 第3列將是:值1(30)
- 第4列將是:值2(400.99)。
我需要這個數據以這種格式(2009年8月6日)轉換並存儲在CVS文件 錯誤:我可以將數據存儲在csv文件,但即時通訊無法將日期轉換和時間在裏面。它在日期列中獲取一些值 我得到41426,並在時間列中獲得這個3456.0。
我沒有得到如何轉換這上面: 請人幫我了.. :(
我的代碼是在這裏:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel {
static void xlsx(File inputFile, File outputFile) {
// For storing data into CSV files
StringBuffer data = new StringBuffer();
try {
FileOutputStream fos = new FileOutputStream(outputFile);
FileInputStream fio = new FileInputStream(inputFile);
// Get the workbook object for XLSX file
XSSFWorkbook wBook = new XSSFWorkbook(fio);
// Get first sheet from the workbook
XSSFSheet sheet = wBook.getSheetAt(0);
Row row;
Cell cell;
// Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
row = rowIterator.next();
// For each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
data.append(cell.getBooleanCellValue() + ",");
break;
case Cell.CELL_TYPE_NUMERIC:
if (row.getCell(0).getCellType() == Cell.CELL_TYPE_NUMERIC){
data.append(cell.getNumericCellValue() + ",");
}
if (DateUtil.isCellDateFormatted(row.getCell(0))) {
System.out.println ("Row No.: " + row.getRowNum()+ " " +
row.getCell(0).getDateCellValue());
data.append(row.getCell(0).getDateCellValue() + ",");
}
break;
case Cell.CELL_TYPE_STRING:
data.append(cell.getStringCellValue() + ",");
break;
case Cell.CELL_TYPE_BLANK:
data.append("" + ",");
break;
default:
data.append(cell + ",");
}
}data.append("\r\n");
}//System.out.println();
//System.out.println(data);
fos.write(data.toString().getBytes());
fos.close();
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
//testing the application
public static void main(String[] args) {
//reading file from desktop
File inputFile = new File("D:\\project-work\\sampleData.xlsx");
//writing excel data to csv
File outputFile = new File("D:\\project-work\\Data.csv");
xlsx(inputFile, outputFile);
}
如果您將日期值存儲爲CSV中的字符串,則不會顯示您所看到的數字值。在Excel中,使用公式(例如:= YEAR(A1)和TEXT(A1,「mm」)和TEXT(A1,「dd」))將包含Date的列添加爲字符串。還有其他的方法可以做到這一點... Google的快速搜索可以更好地瞭解這一點。 – LuvnJesus
爲什麼不使用[Apache POI提供的示例程序將XSLX文件轉換爲CSV](https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi /xssf/eventusermodel/XLSX2CSV.java),它爲你處理所有這些,並且比你的代碼更低的內存? – Gagravarr