C# web实现下载文件(一)
比较简单的一种方法,前台放一个用于下载的按钮,如图:
样式我用的是ElementUI,文字加图标就很合适了。
<el-button type="primary" @click="onDownload">导出<i class="el-icon-download el-icon--right"></i></el-button>
Controller层的导出代码:
1.通过Sql语句获得需要的DataTable形式的数据
var sel = @"SELECT Emp AS '序号',[Name] AS '姓名',Sex AS '性别',Department AS '部门',Office AS '科室',EmpType AS '人员分类',SysJob AS '系统岗位',Job AS '实际岗位',JobInfo AS '岗位性质',IntoTime AS '上班日期',Attendance AS '出勤情况',WorkTime AS '上班时长',StartTime AS '起始时间',EndTime AS '结束时间',OffTime AS '请假天数' FROM [EMSME].[dbo].[TB_HUMAN_RESOURCES] WITH(NOLOCK) WHERE Emp LIKE '%" + emp + "%' AND Department LIKE '%" + part + "%' AND Attendance LIKE '%" + status + "%' AND Class LIKE '%" + clas + "' AND Office LIKE '%" + office + "%'";
var conn = @"server=XX.XX.XX.XX,1433;Initial Catalog=XX;Persist Security Info=True;User ID=xx;password=xxx";
var dt = SqlHelper.GetDataTable(conn, sel);
SqlHelper类见前文—>Sql工具类
2.设置文件存储目录和文件模板目录。(不需要模板的文件下载后续会更新)
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Doc\xx\");
var temppath = Path.Combine(Path.Combine(path, DateTime.Now.ToString("yyyy\\\\MM\\\\dd")));
var filename = string.Format(@"xx_{0}.xlsx", DateTime.Now.ToString("yyyyMMdd"));
string fullFileName = Path.Combine(temppath, filename);
var rq = DateTime.Now.Day.ToString();
string filePath = Path.Combine(Server.MapPath("/"), @"Doc\模板\employee_" + rq + ".xlsx");
注意一定要添加下列代码,不然会报错。(Error Saving 或 IO Exception)
if (!Directory.Exists(temppath))
{
Directory.CreateDirectory(temppath);
}
if (System.IO.File.Exists(fullFileName))
{
System.IO.File.Delete(fullFileName);
}
3.后台获取前台传过来的数据,放一个例子
string emp = Request.Params["id"].Trim();
4.生成文件
using (var package = new ExcelPackage(new FileInfo(fullFileName), new FileInfo(filePath)))
{
var currentSheet = package.Workbook.Worksheets;
rq += "号";
var summaryWorksheet = currentSheet[rq];
summaryWorksheet.Cells[2, 1].LoadFromDataTable(dt, false);
package.Save();
}
5.返回文件
return File(fullFileName, "application/vnd.ms-excel", filename);
需要添加的引用
using OfficeOpenXml;