I’m trying to append data to an existing CSV file for use in excel.
The amount of data I’m retrieving is very high so I cant just fill the datatable then write it to a CSV. At the moment I’m filling each column of the table with data, writing that to a file, then clearing the table and restarting.
This works in so far as it adds the data to the CSV in separate columns but it adds the new data under the existing in the next column.
This is how the program writes to the CSV:
public void Output_CSV()
{
StringBuilder sb = new StringBuilder();
foreach (DataRow row in DataTable.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
}
File.AppendAllText(outPut, sb.ToString());
sb.Clear();
}
This code adds the all the data in the table, including the blank cells in the previous column, adding the current data in underneath. Is there a way of selecting a column in the table and adding the rows from that column to the CSV.
If I understand correctly you have:
A,B,C
in a CSV file. You’d like to append data to each line:
A,B,C,D,E,F
What you are seeing is
A,B,C
and then on ther next line:
D,E,F
Thats because AppendAllText method just writes to the bottom of the file.
To do what you want you’ll need to read the output file, parse the content, insert the extra data at the correct point and then re-save the file..
I would try loading the file in to a stream, read a line, append the new data to the end of the line and then write the line to a new stream (lets call this final output), repeat that until you’ve parsed all data and then save the final output stream.
This assumes the CSV data has line feed, carriage return or both at the end of each line.