为了账号安全,请及时绑定邮箱和手机立即绑定

使用 CsvHelper 从 excel 以动态方式写入 csv 文件 C#

使用 CsvHelper 从 excel 以动态方式写入 csv 文件 C#

C#
慕仙森 2023-08-13 15:44:33
我正在尝试从 Excel 文件生成 CSV 文件。我有不同的 Excel 文件,我想读取它们并生成 CSV 文件。我想这一定很容易,但我遇到了一些麻烦。我的想法是读取 Excel 文件的第一行(例如标题),然后读取其他行作为值,这样我就可以编写 CSV。
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

public class Program

{

    public static void Main()

    {

        string filePath = "C:\\Users\\{User}\\Desktop\\sample.xlsx";

        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

        List<List<object>> rows = new List<List<object>>();

        List<object> row = new List<object>();

        // Excel Reader

        using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))

        {

            using (var reader = ExcelReaderFactory.CreateReader(stream, new ExcelReaderConfiguration

            {

                FallbackEncoding = Encoding.GetEncoding(1252),


            }))

            {

                do

                {

                    while (reader.Read())

                    {

                        row.Clear();

                        for (int i = 0; i < reader.FieldCount; i++)

                        {

                            var field = reader.GetValue(i);

                            if (field is int valueInt)

                            {

                                row.Add(valueInt);

                            }

                            else if (field is bool valueBool)

                            {

                                row.Add(valueBool);

                            }

                            else if (field is DateTime valueDate)

                            {

                                //row.Add(valueDate); You can write any condition there

                                row.Add(valueDate.Year);

                            }

                            else if (field is TimeSpan valueTime)

                            {

                                row.Add(valueTime);

                            }

                            else if (field is string valueString)

                            {

                                row.Add(valueString);

                            }

                            else if (field is null)

                            {

                                row.Add(field);

                            }

                        }

                        if (row.Any())

                        {

                            rows.Add(row);

                        }

                    }

                } while (reader.NextResult());


            }

        }

        // CSV Writer

        using (var writer = new StreamWriter("C:\\Users\\{User}\\Desktop\\sample.csv"))

        using (var csv = new CsvWriter(writer))

        {

            foreach (var i in rows)

            {

                foreach (var field in i)

                {

                    csv.WriteField(field);

                }

                csv.NextRecord();

            }

        }

    }


}

该程序将 Excel (sample.xlsx) 文件转换为 CSV(sample.csv) 文件。


查看完整回答
反对 回复 2023-08-13
?
慕慕森

TA贡献1856条经验 获得超17个赞

创建一个类文件,其中包含与 Excel 列相同的属性。解析您的 Excel 文件并将其加载到您的类的实例中。写一个简单的程序如下


void Main()

{

    var records = new List<Foo>

    {

        new Foo { Id = 1, Name = "one" },

    };


    using (var writer = new StreamWriter("path\\to\\file.csv"))

    using (var csv = new CsvWriter(writer))

    {

        csv.WriteRecords(records);

    }

}


public class Foo

{

    public int Id { get; set; }

    public string Name { get; set; }

}

其中 Foo 是类文件。希望这可以帮助


查看完整回答
反对 回复 2023-08-13
  • 2 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信