答案 0 :(得分:7)
不知道你是否已经知道这一点,但是:
.csv
个文件,所以你所做的任何转换只会对你那个不那么“有天赋”的用户有礼貌。.csv
文件中添加的信息添加信息,这将使其更有用。换句话说,CSV是一种“哑”格式,将其转换为.xls
将(可能)增加文件大小,但不会使格式变得更聪明。柯蒂斯对POI的建议也是我想到的第一件事。
如果你在Windows机器上进行这种转换,另一个替代方案可能是Jacob,这是一个Java-COM桥,它允许你从Java程序中有效地远程控制Excel,以便做一些像开放的事情一个文件并以不同的格式保存,甚至可能应用一些格式更改等。
最后,我在通过JDBC-ODBC桥访问的Excel工作表中将SQL INSERT
(通过JDBC)取得了一些成功。即ODBC可以使Excel文件看起来像数据库。但它不是很灵活,你不能要求DB创建任意命名的.XLS
文件。
编辑:
在我看来readLine()
已经没有给你全部了。怎么知道回车不是线路终结者?您应该能够在readLine()之后使用debug print语句验证这一点。
如果确实如此,它会很糟糕,因为前进的方向是
这两种选择都是你可能不期待的工作。
答案 1 :(得分:5)
答案 2 :(得分:4)
复制粘贴下面的程序,我运行程序,它运行正常,如果您对此程序有任何疑虑,请告诉我。(您需要Apache POI Jar来运行此程序)
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
public class CSVToExcelConverter {
public static void main(String args[]) throws IOException
{
ArrayList arList=null;
ArrayList al=null;
String fName = "test.csv";
String thisLine;
int count=0;
FileInputStream fis = new FileInputStream(fName);
DataInputStream myInput = new DataInputStream(fis);
int i=0;
arList = new ArrayList();
while ((thisLine = myInput.readLine()) != null)
{
al = new ArrayList();
String strar[] = thisLine.split(",");
for(int j=0;j<strar.length;j++)
{
al.add(strar[j]);
}
arList.add(al);
System.out.println();
i++;
}
try
{
HSSFWorkbook hwb = new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet");
for(int k=0;k<arList.size();k++)
{
ArrayList ardata = (ArrayList)arList.get(k);
HSSFRow row = sheet.createRow((short) 0+k);
for(int p=0;p<ardata.size();p++)
{
HSSFCell cell = row.createCell((short) p);
String data = ardata.get(p).toString();
if(data.startsWith("=")){
cell.setCellType(Cell.CELL_TYPE_STRING);
data=data.replaceAll("\"", "");
data=data.replaceAll("=", "");
cell.setCellValue(data);
}else if(data.startsWith("\"")){
data=data.replaceAll("\"", "");
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(data);
}else{
data=data.replaceAll("\"", "");
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
cell.setCellValue(data);
}
//*/
// cell.setCellValue(ardata.get(p).toString());
}
System.out.println();
}
FileOutputStream fileOut = new FileOutputStream("test.xls");
hwb.write(fileOut);
fileOut.close();
System.out.println("Your excel file has been generated");
} catch ( Exception ex ) {
ex.printStackTrace();
} //main method ends
}
}
答案 3 :(得分:1)
Excel中的工具不足以满足OP的要求。他在那里正确的轨道。 Excel无法将多个CSV文件导入同一文件中的不同工作表,这就是您希望在代码中执行此操作的原因。我的建议是使用OpenCSV读取CSV,因为它可以自动纠正数据和缺失列中的换行符,并且它是免费和开源的。它实际上非常非常强大,可以处理各种不同的非标准CSV文件。
答案 4 :(得分:0)
您写道:
我有办法管理csv文件 已经到位,我需要额外的 其他程序的兼容性。
那些其他节目是什么?他们是需要通过Excel文件访问您的数据,还是可以使用JDBC或ODBC连接到数据库?使用数据库作为中心位置,您可以根据需要将数据提取为CSV文件或其他格式。
答案 5 :(得分:0)
我创建了一个名为csv2xls的小软件。它需要Java。