将Excel文件从.csv转换为.xlsx
我希望我的应用程序找到一个excel文件,并将其转换为.xlsx文件 以下是我目前正在做的事情将Excel文件从.csv转换为.xlsx,csv,c#,winforms,Csv,C#,Winforms,我希望我的应用程序找到一个excel文件,并将其转换为.xlsx文件 以下是我目前正在做的事情 var fileName = @"Z:\0328\orders\PurchaseOrder.csv"; FileInfo f = new FileInfo(fileName); f.MoveTo(Path.ChangeExtension(fileName, ".xlsx")); var Newfile = @"Z:\0328\orders\PurchaseOrder.xlsx"; 现在这个确实起作用
var fileName = @"Z:\0328\orders\PurchaseOrder.csv";
FileInfo f = new FileInfo(fileName);
f.MoveTo(Path.ChangeExtension(fileName, ".xlsx"));
var Newfile = @"Z:\0328\orders\PurchaseOrder.xlsx";
现在这个确实起作用了。它将文件扩展名更改为我所需的格式。然而,该文件随后会变得“损坏”,或者至少Excel拒绝打开它,当我尝试进一步冒险时,我的应用程序也不会打开它
有人有解决方案/解决方法吗?我会在CSV文件中进行解析,并用它写出一个Excel文件:我建议使用OpenXMLSDK的包装器。看看他们的例子。创建.xlsx文件非常容易。我建议使用以下技术:
- 它比excel互操作更快
- KBCSV比csv读取方法更健壮
- 它在没有办公室的环境中可用
Application app = new Application();
Workbook wb = app.Workbooks.Open(@"C:\testcsv.csv", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wb.SaveAs(@"C:\testcsv.xlsx", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wb.Close();
app.Quit();
工作簿.SaveAs的第二个参数确定文件的真实格式。您应该使文件扩展名与该格式匹配,以便Excel不会抱怨损坏。您可以在MSDN上看到类型列表及其含义
如往常一样,如果此功能用于服务器环境,请牢记Microsoft的注意事项。在这种情况下,互操作可能不是解决问题的方法:
此代码应打开所需文件,并将其保存为不损坏文件的格式
using Excel = Microsoft.Office.Interop.Excel;
private void Convert_CSV_To_Excel()
{
// Rename .csv To .xls
System.IO.File.Move(@"d:\Test.csv", @"d:\Test.csv.xls");
var _app = new Excel.Application();
var _workbooks = _app.Workbooks;
_workbooks.OpenText("Test.csv.xls",
DataType: Excel.XlTextParsingType.xlDelimited,
TextQualifier: Excel.XlTextQualifier.xlTextQualifierNone,
ConsecutiveDelimiter: true,
Semicolon: true);
// Convert To Excle 97 / 2003
_workbooks[1].SaveAs("NewTest.xls", Excel.XlFileFormat.xlExcel5);
_workbooks.Close();
}
试试这门课;接收任何带有任何分隔符(包括选项卡)的CSV或TXT文件,并转换为Excel(.xls) 示例:
- convertToExcel(@“文件路径”、“\t”、“.csv”)李>
- convertToExcel(@“文件路径”、“\\”、“.txt”)
publicstaticvoidconverttoexcel(字符串文件名、字符串拆分器、字符串扩展名) { 字符串newFileName=fileName.Replace(“.”扩展名“.xls”); string[]lines=File.ReadAllLines(文件名,Encoding.UTF8); int columnCounter=0; foreach(行中的字符串s) { 字符串[]ss=s.Trim().Split(Convert.ToChar(splitter)); 如果(ss.Length>columnCounter) columnCounter=ss.长度; } HSSFWorkbook=新的HSSFWorkbook(); var sheet=workbook.CreateSheet(“数据”); var-rowIndex=0; var rowExcel=sheet.CreateRow(rowIndex); foreach(行中的字符串s) { rowExcel=sheet.CreateRow(rowIndex); 字符串[]ss=s.Trim().Split(Convert.ToChar(splitter)); 对于(int i=0;i
app.DisplayAlerts=false代码>在保存之前。记住在之后将其设置为true!(app是应用程序的名称,Application app=new Application();
)感谢您的回复@DDuffy。。。在浏览了API之后,我终于找到了答案。感谢您的帮助。EPPLus可以通过LoadFromText方法直接加载CSV:-)var range=sheet.Cells[“A1”]。LoadFromText(新文件信息(CSV_文件路径),格式,TableStyles.Medium27,true);这是完整的例子,你能解释一下你的答案吗?仅使用代码的答案通常是不可接受的,因为它们不一定能帮助询问者从错误中吸取教训,等等。xlExcel5的+1-因为当您打开excel文件时,它不会给出内部数据是其他格式的消息。它也适用于\u工作簿[1].SaveAs(“testcsv.xlsx”,excel.XlFileFormat.xlWorkbookDefault)代码>但需要将csv文件重命名为xls。
public static void convertToExcel(string fileName, string splitter, string extension)
{
string newFileName = fileName.Replace("." + extension, ".xls");
string[] lines = File.ReadAllLines(fileName, Encoding.UTF8);
int columnCounter = 0;
foreach (string s in lines)
{
string[] ss = s.Trim().Split(Convert.ToChar(splitter));
if (ss.Length > columnCounter)
columnCounter = ss.Length;
}
HSSFWorkbook workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet("Data");
var rowIndex = 0;
var rowExcel = sheet.CreateRow(rowIndex);
foreach (string s in lines)
{
rowExcel = sheet.CreateRow(rowIndex);
string[] ss = s.Trim().Split(Convert.ToChar(splitter));
for (int i = 0; i < columnCounter; i++)
{
string data = !String.IsNullOrEmpty("s") && i < ss.Length ? ss[i] : "";
rowExcel.CreateCell(i).SetCellType(CellType.String);
rowExcel.CreateCell(i).SetCellValue(data);
}
rowIndex++;
}
for (var i = 0; i < sheet.GetRow(0).LastCellNum; i++)
sheet.AutoSizeColumn(i);
using (FileStream file = new FileStream(newFileName, FileMode.Create, FileAccess.Write))
{
workbook.Write(file);
file.Close();
}
}