代码仅供参考,请根据自己实际情况做异常处理和分表哦~
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);
微信扫码查看本文
发表评论