如何在Excel的基础上使用java编写csv文件?
Posted
技术标签:
【中文标题】如何在Excel的基础上使用java编写csv文件?【英文标题】:How to write csv file on the basis of Excel using java? 【发布时间】:2011-06-29 12:07:12 【问题描述】:我有包含某些数据的电子表格。我想以编程方式将其转储到 CSV 文件。如何使用 java 做到这一点?
【问题讨论】:
可能是***.com/questions/6451765/…的副本 ***.com/questions/101100/csv-api-for-java 【参考方案1】:您可以使用其中一种 API 来读取 Excel 文件。就个人而言,我最喜欢JExcelApi。它真的很容易学习和使用。
【讨论】:
【参考方案2】:这里我使用 OpenCsv API 和 Apache-POI.TO 读取 excel 文件并写入 CSV 文件。
public void ExcelTOCSV()
CSVWriter writer=null;
int columnLength =0;
int i =0;String[] rowData;
HSSFCell cell = null;HSSFSheet sheet=null;
int SheetIndex=0;
try
InputStream resourceAsStream =ClassLoader.getSystemResourceAsStream(filePath);
HSSFWorkbook workbook = new HSSFWorkbook(resourceAsStream);
sheet = workbook.getSheetAt(sheetIndex);
//Here i am create my custom method to get column row on the basis of Sheet index.
columnLength = getNumberOfColumns(sheetIndex);
writer = new CSVWriter(new FileWriter("c:\\yourfile.csv"));
Iterator<Row> rows = sheet.rowIterator();
while (rows.hasNext())
rowData=new String[columnLength];
HSSFRow row = (HSSFRow) rows.next();
Iterator<Cell> cells = row.cellIterator();
i = 0;
while (cells.hasNext())
cell = (HSSFCell) cells.next();
//Must do this, you need to get value based on the cell type
switch (cell.getCellType())
case HSSFCell.CELL_TYPE_NUMERIC:
rowData[i]=Double.toString(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
rowData[i]=cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
default: break;
//end of switch
i++;
//cell while loop
writer.writeNext(rowData);//writing data into file
//Row While loop
writer.close();
catch (IOException ex)
Logger.getLogger(CreateCSVFile.class.getName()).log(Level.SEVERE, null, ex);
获取列数的方法:
public int getNumberOfColumns(int SheetIndex)
int NO_OF_Column=0;HSSFCell cell = null;
HSSFSheet sheet=null;
try
loadFile(); //load give Excel
if(validateIndex(SheetIndex))
sheet = workbook.getSheetAt(SheetIndex);
Iterator rowIter = sheet.rowIterator();
HSSFRow firstRow = (HSSFRow) rowIter.next();
Iterator cellIter = firstRow.cellIterator();
while(cellIter.hasNext())
cell = (HSSFCell) cellIter.next();
NO_OF_Column++;
else
throw new InvalidSheetIndexException("Invalid sheet index.");
catch (Exception ex)
logger.error(ex);
return NO_OF_Column;
【讨论】:
【参考方案3】:http://techblog.ralph-schuster.eu/csv-utility-package-for-java/ 开箱即用地解决您的问题。有一个 CSVUtils 类可以为您进行复制。
【讨论】:
请不要只发布链接作为答案,而是引用最重要的部分,以防止链接腐烂。以上是关于如何在Excel的基础上使用java编写csv文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cordova android 应用程序中使用 javascript 创建 csv 或 Excel 文件
java中生成了一个csv文件,通过excel打开csv,数据没有分列,如何在就java语言里实现。