C#-读写Excel常用框架及其使用方式

 

目录

一、MiniExcel开源框架(推荐)

1、写/导出

方式一 

方式二 

多表创建

更改配置

特性使用

CSV尾行新增行

CSV、XLSX互转

2、读/导入

简单示例

二、NPOI开源框架


一、MiniExcel开源框架(推荐)

 添加NuGet包MiniExcel

详细了解:https://gitee.com/dotnetchina/MiniExcel

1、写/导出

方式一 
        private void Button_Click_TestMini(object sender, RoutedEventArgs e)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), "testExcel.xlsx");
            //匿名类型
            //MiniExcel.SaveAs(path, new[]
            //{
            //    new { ID=1,Name="Test"},
            //    new { ID=2,Name="Mini" },
            //    new { ID=3,Name="Excel"}
            //}, overwriteFile: true);
            MiniExcel.SaveAs(path, new[]
            {
                new Test(){ ID=1,Name="Test"},
                new Test(){ ID=2,Name="Mini" },
                new Test(){ ID=3,Name="Excel"}
            }, overwriteFile: true);
        }

        public class Test
        {
            [ExcelColumn(Name = "ID", Width = 20)]
            public int ID { get; set; }
            [ExcelColumn(Name = "Name", Width = 20)]
            public string Name { get; set; }
        }
方式二 
        private void Button_Click_TestMini(object sender, RoutedEventArgs e)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), "testExcel.xlsx");
           //List<Dictionary<string,object>> test= new List<Dictionary<string, object>>()
           //{ 
           // new Dictionary<string, object>(){ { "ID", "1" },{"Name","Test" } },
           // new Dictionary<string, object>(){ { "ID", "2" },{"Name","Mini" } },
           // new Dictionary<string, object>(){ { "ID", "3" },{"Name","Excel" } },
           //};
           
            List<Test> test = new List<Test>()
            {
                new Test(){ ID=1,Name="Test"},
                new Test(){ ID=2,Name="Mini" },
                new Test(){ ID=3,Name="Excel"}
            };
            MiniExcel.SaveAs(path, test);
        }

        public class Test
        {
            [ExcelColumn(Name = "ID", Width = 20)]
            public int ID { get; set; }
            [ExcelColumn(Name = "Name", Width = 20)]
            public string Name { get; set; }
        }
多表创建
        private void Button_Click_TestMini(object sender, RoutedEventArgs e)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), "testExcel.xlsx");
            var Books = new[]
            {
                new {ID=1,Name="红楼梦" },
                new {ID=2,Name="三国演义" },
                new {ID=3,Name="西游记" },
                new {ID=4,Name="水浒传" },
            };
            var users = new List<Test>()
            {
                new Test(){ ID=1,Name="Mini" },
                new Test(){ ID=2,Name="Test"}
            };
            var sheets = new Dictionary<string, object>()
            {
                { "Sheet1",Books },
                { "Sheet2",users}
            };
            MiniExcel.SaveAs(path, sheets,excelType:ExcelType.XLSX);
        }

        public class Test
        {
            [ExcelColumn(Name = "ID", Width = 20)]
            public int ID { get; set; }
            [ExcelColumn(Name = "Name", Width = 20)]
            public string Name { get; set; }
        }
更改配置
MiniExcel.SaveAs(path, sheets,configuration:new OpenXmlConfiguration() 
{
    TableStyles=TableStyles.None,//表格样式选择
    AutoFilter=false,//自动筛选
    EnableWriteNullValueCell=false,//是否可写入空值,默认true
});
特性使用
  • Name,指定列名称
  • Width,指定列宽
  • Index,指定第几列
  • Ignore,是否忽略该列
  • Format,自定义格式
public class Test
{
    [ExcelColumn(Name = "Id", Width = 20,Index =1,Ignore =true)]
    public int ID { get; set; }

    [ExcelColumn(Name = "UserName", Width = 20)]
    public string Name { get; set; }

    [ExcelColumn(Name = "Date", Width = 20,Format ="yyyy/MM/dd HH:mm:ss")]
    public DateTime DateTime { get; set; }= DateTime.Now;
}
CSV尾行新增行
private void Button_Click(object sender, RoutedEventArgs e)
{
    var path = Path.Combine(Directory.GetCurrentDirectory(), "testExcel.csv");
    var Books = new[]
    {
        new {ID=5,Name="WPF深入浅出" },
        new {ID=6,Name="C#高级编程" },
        new {ID=7,Name="重构" },
    };
    MiniExcel.Insert(path, Books);
}
CSV、XLSX互转
private void Button_Click_Convert(object sender, RoutedEventArgs e)
{
    var xlsxPath = Path.Combine(Directory.GetCurrentDirectory(), "testExcel.xlsx");
    var csvPath = Path.Combine(Directory.GetCurrentDirectory(), "testExcel.csv");
    MiniExcel.ConvertXlsxToCsv(xlsxPath, csvPath);
    //MiniExcel.ConvertCsvToXlsx(csvPath, xlsxPath);
}

2、读/导入

简单示例
public class User
{
    [ExcelColumn(Name = "Date", Width = 20, Format = "yyyy/MM/dd HH:mm:ss")]
    public DateTime DateTime { get; set; } = DateTime.Now;

    [ExcelColumn(Name = "Id", Width = 20)]
    public int ID { get; set; }

    [ExcelColumn(Name = "UserName", Width = 20)]
    public string Name { get; set; }
}

private void Button_Click_ReadTest(object sender, RoutedEventArgs e)
{
    var path = Path.Combine(Directory.GetCurrentDirectory(), "testExcel.xlsx");
    var users = MiniExcel.Query<User>(path).ToList();
    var user = users.Where(u => u.ID.Equals(4)).FirstOrDefault();
    if (user != null)
        MessageBox.Show(user.Name);
}

二、NPOI开源框架

添加NuGet包NPOI

简单示例如下:

        private void Button_Click_TestNPOI(object sender, RoutedEventArgs e)
        {
            IWorkbook workbook = new XSSFWorkbook();
            ISheet sheet1 = workbook.CreateSheet("Sheet1");
            sheet1.CreateRow(0).CreateCell(0).SetCellValue(1);
            sheet1.GetRow(0).CreateCell(1).SetCellValue("NPOI");
            sheet1.CreateRow(1).CreateCell(0).SetCellValue(2);
            sheet1.GetRow(1).CreateCell(1).SetCellValue("Test");
            sheet1.CreateRow(2).CreateCell(0).SetCellValue(3);
            sheet1.GetRow(2).CreateCell(1).SetCellValue("Sheet");

            var path = Path.Combine(Directory.GetCurrentDirectory(), "newExcel.xlsx");
            using (FileStream fs = new FileStream(path, FileMode.Create))
            {
                workbook.Write(fs);
            }
            workbook.Close();
        }

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#读写 Excel 文件可以使用 Microsoft Office 应用程序或开源库。以下是使用 Microsoft Office 应用程序的示例代码: ```csharp using System; using System.Data; using System.Data.OleDb; class ExcelReadWrite { static void Main() { string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=example.xlsx;Extended Properties='Excel 12.0;HDR=YES;'"; // 读取数据 using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]", connection); OleDbDataAdapter adapter = new OleDbDataAdapter(command); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); foreach (DataRow row in dataTable.Rows) { Console.WriteLine(row["Column1"].ToString() + "\t" + row["Column2"].ToString()); } } // 写入数据 using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); OleDbCommand command = new OleDbCommand("INSERT INTO [Sheet1$] ([Column1], [Column2]) VALUES (@Column1, @Column2)", connection); command.Parameters.AddWithValue("@Column1", "Value1"); command.Parameters.AddWithValue("@Column2", "Value2"); int rowsAffected = command.ExecuteNonQuery(); Console.WriteLine(rowsAffected.ToString() + " rows inserted."); } } } ``` 以上代码使用 `OleDbConnection` 和 `OleDbCommand` 类连接到 Excel 文件,并读取或写入数据。需要注意的是,这种方法需要安装 Microsoft Office 应用程序才能工作,且需要保证 Excel 文件的格式正确。 开源库方面,可以使用 `EPPlus` 或 `NPOI` 库来读写 Excel 文件。以下是使用 `EPPlus` 库的示例代码: ```csharp using System; using OfficeOpenXml; class ExcelReadWrite { static void Main() { string filePath = @"example.xlsx"; // 读取数据 using (ExcelPackage package = new ExcelPackage(new System.IO.FileInfo(filePath))) { ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; for (int row = 1; row <= worksheet.Dimension.Rows; row++) { Console.WriteLine(worksheet.Cells[row, 1].Value.ToString() + "\t" + worksheet.Cells[row, 2].Value.ToString()); } } // 写入数据 using (ExcelPackage package = new ExcelPackage(new System.IO.FileInfo(filePath))) { ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; worksheet.Cells[worksheet.Dimension.Rows + 1, 1].Value = "Value1"; worksheet.Cells[worksheet.Dimension.Rows + 1, 2].Value = "Value2"; package.Save(); } } } ``` 以上代码使用 `ExcelPackage` 类连接到 Excel 文件,并读取或写入数据。需要注意的是,这种方法需要安装 `EPPlus` 库才能工作。 综上所述,读写 Excel 文件有多种方法,可以根据具体情况选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值