2014-12-19 2 views
0

В этом коде я получаю некоторую ошибку, что фабрика классов недоступна. Программа посвящена преобразованию файла csv (файл с разделителями-запятыми) файла int xls (Microsoft Excel) на основе точек с запятой. Может кто-нибудь помочь мне в этом.Преобразование csv в xls с использованием C# на основе точек с запятой

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(); 
      } 
     } 
    } 

ответ

0

Открыть файл CSV с помощью Excel и сохранить его как XLSX

+1

Я сделал то же самое. Пожалуйста, предложите другое решение или найдите ошибку в вышеуказанной программе –

0

Ваша задача заключается в следующем:

столбцов индекса Excel с использованием букв не числа, такие как A, B, C, D, E, F, G, H, ... и т.д.

Вам нужно будет преобразовать числовой индекс в индекс букв. Вы можете использовать ASCII в качестве смещения, если у вас нет столбцов более 26 столбцов.

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

EDIT:

Ваш код имеет еще одну проблему. Почему вы снова повторяете столбцы внутри внутреннего цикла? То же самое с внешней петлей 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]; 
} 

И все. Вам не нужно писать внутренний цикл, так как это будет стоить вам много ненужной обработки.

Смежные вопросы