【代码】C#使用ClosedXML读取写入Excel(.xlsx)文件

2022-05-09 15:36:32  阅读 259 次 评论 0 条

代码仅供参考,请根据自己实际情况做异常处理和分表哦~

1、首先是读取

static List<UserInfo> readXls(string filePath)
{
    List<UserInfo> res = new List<UserInfo>();
    using (XLWorkbook wb = new XLWorkbook(filePath))
    {
        var sheet = wb.Worksheets.First();//获取第一张表的数据
        var rows = sheet.RowsUsed().Skip(1);//获取已被使用的行(跳过第一个标题行)
        foreach (var row in rows)
        {
            //var cells = row.CellsUsed();//获得当前行的有效列
            //foreach(var cl in cols)
            //{
            //    string res =cl.GetString();//获取当前列当前行的string值
            //}


            UserInfo ui = new UserInfo();
            ui.uid = Convert.ToInt32(row.Cell(1).GetDouble());//获得当前行的第一列数据
            ui.uname = row.Cell(2).GetString();//获得当前行的第二列数据
            ui.score = row.Cell(3).GetDouble();//获得当前行的第三列数据
            res.Add(ui);
        }
    }

    return res;
}

2、写入

static void saveXls(IList<UserInfo> ulist)
 {
    using (XLWorkbook wb = new XLWorkbook())
    {

        #region 文件属性
        wb.Properties.Author = "我的测试";
        wb.Properties.Category = "用户数据";
        #endregion
        
        //row must start with 1
        var sheet = wb.Worksheets.Add("用户数据");//表名,就是你打开Excel的那个Sheet1,Sheet2,Sheet3...
        sheet.Cell(1, 1).Value = "用户ID";
        
        sheet.Cell(1, 2).Value = "用户名";
        sheet.Cell(1, 3).Value = "分数";
        for (int i = 0; i < ulist.Count; i++)
        {
        
            UserInfo curr = ulist[i];
            //添加数据,那个i+1+1是列,第一个+1是因为这个索引是从1开始的,第二个+1是因为上面已经有了一行标题
            sheet.Cell(i + 1 + 1, 1).Value = curr.uid;
            sheet.Cell(i + 1 + 1, 2).Value = curr.uname;
            sheet.Cell(i + 1 + 1, 3).Value = curr.score;
        }
        
        //往单独的单元格添加数据
        sheet.Cell("E1").Value = "总分";
        sheet.Cell("E2").FormulaA1 = "=sum(C2:C4)";//公式
        
        wb.SaveAs("mytest.xlsx");
    
    
    }
       

}

UserInfo类的内容

public class UserInfo
{
    public int uid { get; set; }
    public string uname { get; set; }
    public double score { get; set; }
}

调用:

 List<UserInfo> list = readXls("mytest.xlsx");//读取
 saveXls(list);



微信扫码查看本文
本文地址:https://www.yangguangdream.com/?id=2202
版权声明:本文为原创文章,版权归 编辑君 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?