layui + MVC ,通过JS实现导出Excel,界面就一个按钮

qq_41300346 2019-09-29 05:21:46
菜鸟求帮助,菜鸟求帮助,菜鸟求帮助
...全文
590 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jie 丨jie 2020-07-29
  • 打赏
  • 举报
回复
最后一步帮到了我,使用a标签。之前用ajax始终都导不出来,单独访问接口又可以
Dear200892 2019-09-30
  • 打赏
  • 举报
回复

        try
            {
                //创建Excel文件的对象
                NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
                //添加一个sheet
                NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
                //获取list数据
                using (XXEntities db = new XXEntities())
                {
                   XXBLL cobll = new XXBLL();
                    List<X> list = cobll.X.OrderByDescending(c => c.CreationDate).Take(100).ToList();
                    //给sheet1添加第一行的头部标题
                    NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
                    row1.CreateCell(0).SetCellValue("订单编号");
                    row1.CreateCell(1).SetCellValue("订单用户");
                    row1.CreateCell(2).SetCellValue("购买用户");                   
                    //将数据逐步写入sheet1各个行
                    for (int i = 0; i < list.Count; i++)
                    {
                        NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);                    
                        rowtemp.CreateCell(3).SetCellValue(list[i].CarName);                     
                        rowtemp.CreateCell(10).SetCellValue(list[i].CreationDate.ToString());
                    }
                    // 写入到客户端 
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
                    book.Write(ms);
                    ms.Seek(0, SeekOrigin.Begin);
                    return File(ms, "application/vnd.ms-excel", "COExport_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
                }
            }
            catch (Exception)
            {
                throw;
            }
这是我很久以前的代码了 前端你只需要一个a标签就可以用了

<a class="layui-btn layui-btn-normal btn_add" href="/X/ExportExcel">订单导出</a>
¿?¿? 2019-09-30
  • 打赏
  • 举报
回复
mvc+layui好像和导出excel没什么关系吧 你在后台把excel生成(写入)之后响应给前台不就好了
极客诗人 2019-09-30
  • 打赏
  • 举报
回复
导出 excel 和你说得这两个 有关系吗
qq_41300346 2019-09-30
  • 打赏
  • 举报
回复

首先点击报表,然后会跳转到第二张图片,等文件下载好,但是跳转的页面没有关闭,需要手动去关闭。
  • 打赏
  • 举报
回复
你的意思导出的时候 不光导出了表格数据 ,还导出了页面的按钮 样子。 第一 隐藏按钮导出 第二 选择导出区域
qq_41300346 2019-09-30
  • 打赏
  • 举报
回复
引用 5 楼 qq_41300346 的回复:
可能我说的不够明确把。我贴下我写的把
  <a class="layui-btn layui-btn-normal" style="cursor:pointer;position:relative;width:80px;background-color:#5FB878;"  id="btn_excel" name="btn_excel"><img style="margin-top:-6px;" src="../../images/load.png" />保险报表</a>   
<script>
layui.config({
base: '../../layuiadmin/' //静态资源所在路径
, version: true
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'sample']);
layui.use(['jquery', 'element', 'table', 'form', 'laydate'], function () {
var table = layui.table, form = layui.form, laydate = layui.laydate, $ = layui.jquery;
$("#btn_excel").on("click", function () {
$("#btn_excel").attr("lay-text", "导出报表");
$("#btn_excel").attr("lay-href", "/DH/ExportBX");
});</script>

后台控制器:

/// <summary>
/// 报表
/// </summary>
/// <returns></returns>
public ActionResult ExportBX()
{

string saveUrl;
bll.ExportBX(out saveUrl);

return Redirect(saveUrl);
}

BLL:

/// <summary>
/// 导出报表
/// </summary>
/// <param name="status"></param>
/// <param name="saveUrl"></param>
/// <param name="rList"></param>
/// <returns></returns>
public bool ExportBX(out string saveUrl)
{
saveUrl = "";

string contentPath = HttpContext.Current.Server.MapPath("~/Content/");

string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsx";
Excel.Application xlApp = new Excel.Application();
Excel.Workbooks xlBooks = xlApp.Workbooks;
object missing = System.Reflection.Missing.Value;
List<BX> entity = this.Get_bx();
try
{

Excel.Workbook xlBook = xlBooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
//让后台执行设置为不可见,为true的话会看到打开一个Excel
xlApp.Visible = false;


object[,] arData = new object[entity.Count + 1, 20]; //行,列
arData[0, 0] = "业务部";
arData[0, 1] = "分公司";
arData[0, 2] = "业务员";
arData[0, 3] = "立项编号";
arData[0, 4] = "车架号";
arData[0, 5] = "客户";
arData[0, 6] = "联系方式";
arData[0, 7] = "首次上牌日";
arData[0, 8] = "行驶证户主";
arData[0, 9] = "使用性质";
arData[0, 10] = "荷载人数";
arData[0, 11] = "车牌";
arData[0, 12] = "发动机号";
arData[0, 13] = "交强险到期日";
arData[0, 14] = "交强险录入人员";
arData[0, 15] = "交强险录入时间";
arData[0, 16] = "商业险到期日";
arData[0, 17] = "商业险录入人员";
arData[0, 18] = "商业险录入时间";
arData[0, 19] = "案件状态";



for (var i = 0; i < entity.Count; i++)
{
var n = entity[i];
arData[i + 1, 0] = n.业务部;
arData[i + 1, 1] = n.分公司;
arData[i + 1, 2] = n.业务员;
arData[i + 1, 3] = n.立项编号;
arData[i + 1, 4] = n.车架号;
arData[i + 1, 5] = n.客户;
arData[i + 1, 6] = n.联系方式;
arData[i + 1, 7] = n.首次上牌日;
arData[i + 1, 8] = n.行驶证户主;
arData[i + 1, 9] = n.使用性质;
arData[i + 1, 10] = n.荷载人数;
arData[i + 1, 11] = n.车牌;
arData[i + 1, 12] = n.发动机号;
arData[i + 1, 13] = n.交强险到期日;
arData[i + 1, 14] = n.交强险录入人员;
arData[i + 1, 15] = n.交强险录入时间;
arData[i + 1, 16] = n.商业险到期日;
arData[i + 1, 17] = n.商业险录入人员;
arData[i + 1, 18] = n.商业险录入时间;
arData[i + 1, 19] = n.案件状态;
}


Excel.Worksheet xlSheet = (Excel.Worksheet)xlBook.Worksheets[1];
xlSheet.Name = "保-" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
int colCount = 20;
int rowCount = entity.Count;

string startCol = "A";
int iCnt = (colCount / 32);
string endColSignal = (iCnt == 0 ? "" : ((char)('A' + (iCnt - 1))).ToString());
string endCol = endColSignal + ((char)('A' + colCount - iCnt * 32 - 1)).ToString();

Excel.Range range = xlSheet.get_Range(startCol + "1", endCol + "1"); //取得表头
range.Font.Bold = 1;//Excel文件列名 字体设定为Bold
range.Font.Size = 14;
range.Font.ColorIndex = 2; //白色
range.Interior.ColorIndex = 1; //黑底
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //置中


range = xlSheet.Columns[3];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[4];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[5];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[6];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[11];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[12];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[13];
range.NumberFormatLocal = "@";

Excel.Range totalrange = xlSheet.get_Range(startCol + "1", endCol + (rowCount - iCnt * 32 + 1).ToString());
totalrange.Value = arData; //给Exccel中的Range整体赋值
//totalrange.Columns.AutoFit(); //设定Excel列宽度自适应
totalrange.Font.Name = "微软雅黑";
totalrange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous; //框线

range = xlSheet.Columns;
range.Columns.AutoFit();


xlApp.DisplayAlerts = false;
xlApp.AlertBeforeOverwriting = false;

xlApp.Workbooks[1].RefreshAll();

string savePath = contentPath + "Report";
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
xlBook.SaveAs(contentPath + "Report/" + fileName, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing);

}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
xlBooks.Close();
xlBooks = null;
xlApp.Quit();
xlApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
saveUrl = HttpContext.Current.Request.ApplicationPath + "Content/Report/" + fileName;
return true;

}



目前是可以导出但是,会新增一个界面,还需要手动关闭,应该怎么解决
qq_41300346 2019-09-30
  • 打赏
  • 举报
回复
可能我说的不够明确把。我贴下我写的把
  <a class="layui-btn layui-btn-normal" style="cursor:pointer;position:relative;width:80px;background-color:#5FB878;"  id="btn_excel" name="btn_excel"><img style="margin-top:-6px;" src="../../images/load.png" />保险报表</a>   
<script>
layui.config({
base: '../../layuiadmin/' //静态资源所在路径
, version: true
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'sample']);
layui.use(['jquery', 'element', 'table', 'form', 'laydate'], function () {
var table = layui.table, form = layui.form, laydate = layui.laydate, $ = layui.jquery;
$("#btn_excel").on("click", function () {
$("#btn_excel").attr("lay-text", "导出报表");
$("#btn_excel").attr("lay-href", "/DH/ExportBX");
});</script>

后台控制器:

/// <summary>
/// 报表
/// </summary>
/// <returns></returns>
public ActionResult ExportBX()
{

string saveUrl;
bll.ExportBX(out saveUrl);

return Redirect(saveUrl);
}

BLL:

/// <summary>
/// 导出报表
/// </summary>
/// <param name="status"></param>
/// <param name="saveUrl"></param>
/// <param name="rList"></param>
/// <returns></returns>
public bool ExportBX(out string saveUrl)
{
saveUrl = "";

string contentPath = HttpContext.Current.Server.MapPath("~/Content/");

string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsx";
Excel.Application xlApp = new Excel.Application();
Excel.Workbooks xlBooks = xlApp.Workbooks;
object missing = System.Reflection.Missing.Value;
List<BX> entity = this.Get_bx();
try
{

Excel.Workbook xlBook = xlBooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
//让后台执行设置为不可见,为true的话会看到打开一个Excel
xlApp.Visible = false;


object[,] arData = new object[entity.Count + 1, 20]; //行,列
arData[0, 0] = "业务部";
arData[0, 1] = "分公司";
arData[0, 2] = "业务员";
arData[0, 3] = "立项编号";
arData[0, 4] = "车架号";
arData[0, 5] = "客户";
arData[0, 6] = "联系方式";
arData[0, 7] = "首次上牌日";
arData[0, 8] = "行驶证户主";
arData[0, 9] = "使用性质";
arData[0, 10] = "荷载人数";
arData[0, 11] = "车牌";
arData[0, 12] = "发动机号";
arData[0, 13] = "交强险到期日";
arData[0, 14] = "交强险录入人员";
arData[0, 15] = "交强险录入时间";
arData[0, 16] = "商业险到期日";
arData[0, 17] = "商业险录入人员";
arData[0, 18] = "商业险录入时间";
arData[0, 19] = "案件状态";



for (var i = 0; i < entity.Count; i++)
{
var n = entity[i];
arData[i + 1, 0] = n.业务部;
arData[i + 1, 1] = n.分公司;
arData[i + 1, 2] = n.业务员;
arData[i + 1, 3] = n.立项编号;
arData[i + 1, 4] = n.车架号;
arData[i + 1, 5] = n.客户;
arData[i + 1, 6] = n.联系方式;
arData[i + 1, 7] = n.首次上牌日;
arData[i + 1, 8] = n.行驶证户主;
arData[i + 1, 9] = n.使用性质;
arData[i + 1, 10] = n.荷载人数;
arData[i + 1, 11] = n.车牌;
arData[i + 1, 12] = n.发动机号;
arData[i + 1, 13] = n.交强险到期日;
arData[i + 1, 14] = n.交强险录入人员;
arData[i + 1, 15] = n.交强险录入时间;
arData[i + 1, 16] = n.商业险到期日;
arData[i + 1, 17] = n.商业险录入人员;
arData[i + 1, 18] = n.商业险录入时间;
arData[i + 1, 19] = n.案件状态;
}


Excel.Worksheet xlSheet = (Excel.Worksheet)xlBook.Worksheets[1];
xlSheet.Name = "保-" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
int colCount = 20;
int rowCount = entity.Count;

string startCol = "A";
int iCnt = (colCount / 32);
string endColSignal = (iCnt == 0 ? "" : ((char)('A' + (iCnt - 1))).ToString());
string endCol = endColSignal + ((char)('A' + colCount - iCnt * 32 - 1)).ToString();

Excel.Range range = xlSheet.get_Range(startCol + "1", endCol + "1"); //取得表头
range.Font.Bold = 1;//Excel文件列名 字体设定为Bold
range.Font.Size = 14;
range.Font.ColorIndex = 2; //白色
range.Interior.ColorIndex = 1; //黑底
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //置中


range = xlSheet.Columns[3];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[4];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[5];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[6];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[11];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[12];
range.NumberFormatLocal = "@";
range = xlSheet.Columns[13];
range.NumberFormatLocal = "@";

Excel.Range totalrange = xlSheet.get_Range(startCol + "1", endCol + (rowCount - iCnt * 32 + 1).ToString());
totalrange.Value = arData; //给Exccel中的Range整体赋值
//totalrange.Columns.AutoFit(); //设定Excel列宽度自适应
totalrange.Font.Name = "微软雅黑";
totalrange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous; //框线

range = xlSheet.Columns;
range.Columns.AutoFit();


xlApp.DisplayAlerts = false;
xlApp.AlertBeforeOverwriting = false;

xlApp.Workbooks[1].RefreshAll();

string savePath = contentPath + "Report";
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
xlBook.SaveAs(contentPath + "Report/" + fileName, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing);

}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
xlBooks.Close();
xlBooks = null;
xlApp.Quit();
xlApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
saveUrl = HttpContext.Current.Request.ApplicationPath + "Content/Report/" + fileName;
return true;

}
江湖评谈 2019-09-29
  • 打赏
  • 举报
回复
导出 excel 需要 layui 和 mvc 吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧