C# を使用して Excel ファイル (.xls または .xlsx) にデータを書き込みたいと考えています。
現時点での私のコードは次のとおりです。
int length = readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length;
List<List<string>> dataList = new List<List<string>>();
foreach (string line in readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
{
List<string> partsLine = new List<string>();
partsLine.AddRange(line.Split('\t'));
dataList.Add(partsLine);
}
だから、私はすべてのデータを行に分割しています。
次に、各行を '\t' セパレーターで分割し、行の各部分をリストに追加します。
最後に、分割行のすべてのリストを含むリストがあります。
したがって、リストは次のようになります。
- List1 {txt1, txt 2} = 最初の行
- List2 {txt3, txt 4, txt 5, txt 6} = 2 行目
- List3 {txt7, txt 8, txt 9, txt 10} = 3 行目
- List4 {txt 11, txt 12} など
すべてのリストは、ご覧のとおり同じ長さではありません。
私がやりたいのは、すべてのリストを CSV ファイルに書き込むことです。
各リストは、リストの長さに応じて、行と特定の数の列を埋めます (つまり、txt1 は (row1, col1) である必要があり、txt2 は (row1, col2) である必要があり、txt3 は (row2, col1) である必要があります)、txt4 (row2, col2)...) になります。
データを .csv ファイルにエクスポートすることはできましたが、.xls (または .xlsx) でエクスポートしようとすると、データが正しくフォーマットされません。
.csv 書き込みのコードは次のとおりです。
const string separator = ";";
// Writing the list to the .csv file
try
{
using (StreamWriter writer = new StreamWriter(path + "\\data.csv", false))
{
dataList.ForEach(line =>
{
var lineArray = line.Select(c => c.Contains(separator) ? c.Replace(separator.ToString(), "\\" + separator) : c).ToArray();
writer.WriteLine(string.Join(separator, lineArray));
});
}
}
catch (Exception ex)
{
textBoxData.AppendText("Error while writing data to .csv file (" + ex.Message + ")");
}
ありがとう