基于分号使用C#将csv转换为xls

时间:2014-12-19 11:46:38

标签: asp.net

在本规范中,我收到一些错误,即班级工厂不可用。该程序是基于分号转换csv(逗号分隔值)文件int xls(Microsoft Excel)文件。任何人都可以帮助我。

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

2 个答案:

答案 0 :(得分:0)

使用Excel打开csv文件并将其另存为xlsx

答案 1 :(得分:0)

您的问题如下:

Excel索引列使用字母而不是数字,如A,B,C,D,E,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];
}

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