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