用C#编写和读取Excel文件

11

我正在编写一个程序,通过Selenium Web Driver从网站获取数据。我正试图为我们的项目创建足球比赛日程表。 到目前为止,我已经能够从网站上获取日期和时间、队名和比分。同时,我还在尝试将数据写入文本文件,但是在写入文本文件时会有些混乱。

我该如何将数据写入Excel文件中并进行读取呢? 我想要像这样写入:

Date-Time     First-Team   Second-Team    Score    Statistics
28/07 19:00   AM           AVB            2-1      Shot 13123 Pass 65465 ...
28/07 20:00   BM           BVB            2-2      Shot 13123 Pass 65465 ...
28/07 20:00   CM           CVB            2-3      Shot 13123 Pass 65465 ...

这是我的代码的一部分:

StreamWriter file = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Test" + "\\" + pathName + "\\" + subFile + "\\" + pathName + ".txt", false);

for (int k = 2; k > 1; k--)
{ 
     //doing some stuff
}
写作部分:
for (int x = 0; x <dT.Count; x++)
{
     file.Write(dateTime[x] + " " + firstTeam[x] + " "
                       + secondTeam[x] + " " + firstHalf[x] + " " + secondHalf[x] + " ")
     for (int i = 0; i < total_FS.Count(); i++)
     {
           int index = total_FS[i].Length;
           if (total_FS[i][index-1].ToString() != " " && total_FS[i] != "-")
           {
                 file.Write(total_FS[i]);
           }
           else
           {
                 SpaceC++;
                 if (total_FS[i][index - 1].ToString() == " ")
                 file.Write(total_FS[i]);
           }
           if (SpaceC == 9)
           {
                 file.Write("\n");
                 SpaceC = 0;
                 break;
           }
      }


}
2个回答

7

有一些很酷的库可以用来轻松读写Excel文件。您可以在项目中引用它们,轻松创建/修改电子表格。

EPPlus 非常适合开发人员使用,易于使用。

NOPI

DocumentFormat.OpenXml 它为电子表格对象提供了强类型类,并且似乎很容易使用。

Microsoft Office的Open XML SDK 2.0 提供强类型类/易于使用。

ClosedXML - OpenXML的简便方式 ClosedXML使开发人员更容易创建(.xlsx, .xlsm等)文件。

SpreadsheetGear *付费 - 可在ASP.NET中导入/导出Excel工作簿的库


1
尽快,我会查看并尝试它。非常感谢。 - Kaan Taha Köken
1
我强烈推荐 EPPlus。 - Kevin
@Kevin 是的,我也是!EPPlus很好用,而且非常容易上手。 - Krzysztof Lach
非常感谢。我试过了,它非常易于使用。 - Kaan Taha Köken
3
MS COM对象已被弃用多年。您应该使用Open XML SDK来处理现代Office文件格式。 - Scott Chamberlain

4

不要创建XLS文件,而是创建一个可以用Excel打开的CSV文本文件。字段之间用逗号分隔,每行代表一条记录。

field11,field12
field21,field22

如果一个字段包含了逗号,它需要用双引号括起来。
"field11(row1,column1)", field12
field21, field22

如果一个字段包含双引号,它们需要被转义。但是你可以使用 CsvHelper 来完成这个任务。从 Nuget 获取它。
安装命令如下:

PM> Install-Package CsvHelper

以下是使用示例。
using(var textWriter = new StreamWriter(@"C:\mypath\myfile.csv")
{
    var writer = new CsvWriter(textWriter);
    writer.Configuration.Delimiter = ",";

    foreach (var item in list)
    {
        csv.WriteField("field11");
        csv.WriteField("field12");
        csv.NextRecord();
    }
}

完整文档可以在这里找到。


如果我有大量的数据,那么这不会很困难。例如,如果我有1,000个团队名称,日期时间@derloopkat。 - Kaan Taha Köken
在这种情况下,您可以首先迭代行,然后对于每一行迭代列。否则,根据某些代码示例,您可以传递表示行集合的复杂对象,并使用writer.WriteRecords(rows);直接将它们写入文件。但是我没有尝试过。请参见https://dev59.com/MGMl5IYBdhLWcg3wBzDy#44728910。 - derloopkat
好的,我会尝试。非常感谢 @derlookat。 - Kaan Taha Köken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接