在分号的基础上使用C#将csv转换为xls

问题描述:

在此代码中,出现类工厂不可用的错误。本程序是关于基于分号转换csv(逗号分隔值)文件int xls(Microsoft Excel)文件。有人能帮我解决吗?在分号的基础上使用C#将csv转换为xls

using Microsoft.Office.Interop.Excel; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using Excel = Microsoft.Office.Interop.Excel; 
using Microsoft.Office.Core; 
using Microsoft.Office.Tools.Excel; 
namespace ReadWriteCSV 
{ 
    public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Excel.Application excel = new Excel.Application(); 
      Excel.Workbook workBook = excel.Workbooks.Add(); 
      Excel.Worksheet sheet = workBook.ActiveSheet; 

      string fullPath = @"D:\Work\Sep-14\ReadWriteCSV\ReadWriteCSV\File\diff_16122014095440.csv"; 
      string[] fileRows = File.ReadAllLines(fullPath, Encoding.UTF8); 

      foreach (string rows in fileRows) 
      { 
       var columns = rows.Split(';'); 

       for (int j = 0; j < fileRows.Length; j++) 
       { 
        for (int i = 0; i < columns.Length; i++) 
        { 
         List<string> elements = new List<string>(); 
         foreach (string col in columns) 
         { 
          elements.Add(col); 
          sheet.Cells[i + 1, j + 1] = col; 
         } 
         } 
        } 
       } 
      workBook.SaveAs(@"D:\Work\Sep-14\ReadWriteCSV\ReadWriteCSV\File\WriteXls.xlsx"); 
      workBook.Close(); 
      } 
     } 
    } 

使用Excel并将其保存为XLSX

+1

我做了同样的事情。请建议其他解决方案或在上述程序中找到错误 – 2014-12-19 11:54:25

你的问题如下打开CSV文件:使用字母,如A,B,C,d,E

Excel的索引列不是数字, F,G,H等等。

您需要将数字索引转换为字母索引。如果没有超过26列的列,则可以使用ASCII作为偏移量。

sheet.Cells[i + 1, ((char)(j+ 65)).ToString()] = col; //65 is ASCII for letter A 

编辑:

你的代码中有一个问题。为什么你要在内部循环中重复遍历列?与外部foreach循环相同。所有你需要的代码是这样的:

for (int i = 0; i< fileRows.length;i++) 
{ 
    string row = fileRows[i]; 
    string[] columns = row.Split(';'); 
    for (int j =0; j<columns.length;j++) 
     sheet.Cells[i + 1, ((char)(j+ 65)).ToString()] = columns[j]; 
} 

就是这样。你不需要编写内部循环,因为它会花费你很多无用的处理。