如何访问csv文件并将数据插入csv

时间:2020-05-29 01:27:58

标签: c#

我正在尝试将数据插入到csv文件中。我尝试使用XLWorkbook参考来访问和插入数据,但我知道XLWorkbook仅支持xlsx,xslm,xltx和xltm扩展。

我正在尝试找到与我试图实现的目标类似的东西,可以将数据插入csv文件中的指定列。我已经将XLWorkbook用于其他目的,但是我不知道必须使用csv时可以使用什么。

//Accessing the csv file where I am trying to insert data.
string rootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
string filelocation = @"\csv\TestData.csv";
string location = rootPath + filelocation;

XLWorkbook workbook = new XLWorkbook(pathfile);
IXLWorksheet worksheet = workbook.Worksheet("Sheet1");
//Insert data after first row as first row contains column header
int lastrow = worksheet.LastRowUsed().RowNumber() + 1;

//through previous function I am trying get data from database and insert those data into csv cells
worksheet.Cell(String.Format("B{0}", lastrow)).Value = dummydata.FirstName;
worksheet.Cell(String.Format("C{0}", lastrow)).Value = dummydata.LastName;
worksheet.Cell(String.Format("D{0}", lastrow)).Value = dummydata.Address1;
worksheet.Cell(String.Format("E{0}", lastrow)).Value = dummydata.Address2;
worksheet.Cell(String.Format("F{0}", lastrow)).Value = dummydata.City;
worksheet.Cell(String.Format("G{0}", lastrow)).Value = dummydata.StateProvinceCode;
worksheet.Cell(String.Format("H{0}", lastrow)).Value = dummydata.ZipCode;
worksheet.Cell(String.Format("I{0}", lastrow)).Value = dummydata.Country;
worksheet.Cell(String.Format("J{0}", lastrow)).Value = dummydata.HomePhone;
worksheet.Cell(String.Format("L{0}", lastrow)).Value = dummydata.HomePhone;
worksheet.Cell(String.Format("M{0}", lastrow)).Value = dummydata.CellPhone;
worksheet.Cell(String.Format("T{0}", lastrow)).Value = dummydata.Email;
worksheet.Cell(String.Format("U{0}", lastrow)).Value = dummydata.Country;

//After inserting save the file
workbook.Save();

1 个答案:

答案 0 :(得分:1)

您可以直接复制并使用此代码。它应该解决您的问题。

这是我开发的用于替换和/或添加csv单元的类:

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace CSVManager
{
    public class CSVWorker
    {
        private string m_FileName = string.Empty;

    public CSVWorker(string fileName)
    {
        m_FileName = fileName;
    }

    public void AddCells(int row, int column, string newValue)
    {
        var encoding = Encoding.GetEncoding("iso-8859-1");
        var csvLines = File.ReadAllLines(m_FileName, encoding);

        if (row < csvLines.Length)
        {         
            ReplaceCells(row, column, newValue);         
        }
        else
        {
            using (FileStream stream = new FileStream(m_FileName, FileMode.Create))
            {
                using (StreamWriter writer = new StreamWriter(stream, encoding))
                {
                    foreach (var line in csvLines)
                    {
                        writer.WriteLine(line);
                    }

                    int blankLines = row - csvLines.Length - 1;

                    for (int i =  0; i < blankLines; i++)
                    {
                        writer.WriteLine("");
                    }

                    string blankCols = string.Empty;

                    for (int i = 0; i < column-1; i++)
                    {
                        blankCols += ',';
                    }

                    writer.WriteLine(blankCols + newValue);                       
                }
            }
        }
    }

    public void ReplaceCells(int row, int column, string newValue)
    {
        var encoding = Encoding.GetEncoding("iso-8859-1");
        var csvLines = File.ReadAllLines(m_FileName, encoding);

        for (int i = 0; i < csvLines.Length; i++)
        {
            //var values = csvLines[i].Split(',');
            List <string> values = csvLines[i].Split(',').ToList();

            if (i == row)
            {
                if (column < values.Count)
                {
                    values[column] = newValue;
                }
                else 
                {
                    while (values.Count < column - 1)
                    {
                        values.Append(",");
                    }

                    values.Append(newValue);
                }

                using (FileStream stream = new FileStream(m_FileName, FileMode.Create))
                {
                    using (StreamWriter writer = new StreamWriter(stream, encoding))
                    {
                        for (int currentLine = 0; currentLine < csvLines.Length; ++currentLine)
                        {
                            if (currentLine == i)
                            {
                                writer.WriteLine(string.Join(",", values));
                            }
                            else
                            {
                                writer.WriteLine(csvLines[currentLine]);
                            }
                        }

                        writer.Close();
                    }

                    stream.Close();
                    break;
                }
            }
        }
    }
  } 
}

这是我的用法:

namespace CSVManager
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = @"C:\Users\mklig\Documents\TestCsv.csv";
            CSVWorker csvWorker = new CSVWorker(fileName);

            int row = 4;
            int col = 4;
            string newVal = "success";
            //csvWorker.ReplaceCells(row, col, newVal);
            csvWorker.AddCells(row, col, newVal);

         }
    }
}
相关问题