【发布时间】:2013-07-01 09:31:17
【问题描述】:
我想使用 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} = 第二行
- List3 {txt7, txt 8, txt 9, txt 10} = 第三行
- 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 + ")");
}
谢谢
【问题讨论】:
-
对不起,我真的不知道我是否理解你的问题。但是您是否知道 XLS/XLSX 文件具有特定的内部结构?这明明不是简单的分隔文件?
-
嗨。不确切知道您的问题是什么,以及您要达到的目标。但是话又说回来,除了流写入器之外,您的所有代码似乎都只是以下
writer.Write(.Replace(";", "\\;").Replace("\t", ";")如果是这样,这将输出一个有效的 CSV(但分号)文件。我已经尝试使用以下字符串“a\tb\tc\r\nd\te”,并且 excel 设法打开了结果。