Как получить доступ к файлу csv и вставить данные в csv - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь вставить данные в файл 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 Ответ

1 голос
/ 29 мая 2020

Вы можете просто скопировать и использовать этот код как есть. Это должно решить ваши проблемы.

Вот класс, который я разработал для замены и / или добавления ячеек 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);

         }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...