如何使用ASP.NETMVC导出Excel文件中的表?

如何使用ASP.NETMVC导出Excel文件中的表?,excel,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-3,Excel,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 3,我的视图由多个表组成,我希望从Excel文件的视图中导出多个表。我当前的函数仅帮助我导出1个表 有谁能帮我完成这段代码以便可以导出多个表吗 报告虚拟机 导出的操作方法 公共文件ContentResult下载报告(日期时间开始,日期时间结束) { //var uName=User.Identity.Name; var fileDownloadName=String.Format(“Report.xlsx”); const string contentType=“application/vnd.op

我的视图由多个表组成,我希望从Excel文件的视图中导出多个表。我当前的函数仅帮助我导出1个表

有谁能帮我完成这段代码以便可以导出多个表吗

  • 报告虚拟机
  • 导出的操作方法
  • 公共文件ContentResult下载报告(日期时间开始,日期时间结束) { //var uName=User.Identity.Name; var fileDownloadName=String.Format(“Report.xlsx”); const string contentType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”; //将ef数据传递给方法 ExcelPackage package=GenerateExcelFile(db.Chats.Where(x=>System.Data.Entity.DbFunctions.TruncateTime(x.ChatCreateDateTime)>=start&&System.Data.Entity.DbFunctions.TruncateTime(x.ChatCreateDateTime)a.ScenarioList)。选择(b=>new ReportVM() { ScenName=b.键, Count=b.Count() }).ToList()); var fsr=new FileContentResult(package.GetAsByteArray(),contentType); fsr.FileDownloadName=FileDownloadName; 返回fsr; } 专用静态ExcelPackage GenerateExcelFile(IEnumerable数据源) { ExcelPackage pck=新的ExcelPackage(); //创建工作表 Excel工作表ws=pck.工作簿.Worksheets.Add(“工作表1”); //设置标题 ws.Cells[1,1].Value=“Scenario”; ws.Cells[1,2].Value=“聊天次数”; //插入数据 对于(int i=0;i 因此,现在它导出表grouby=ScenarioList的数据。我还想在groupBy=Username中包含另一列。所以在导出数据时,Excel文件应该包含两张表。1表示表格场景列表,2表示表格用户名


    非常感谢你的帮助。提前谢谢。

    您需要创建div/table,将所有表放在其中,然后使用下面的javascript函数。请在包含所有数据的同一页面上单击按钮调用此javascript函数。这是我的工作,我已经在我的项目中使用

    function DownloadToExcel() {
    
    var htmls = $("#compareBodyContent")[0].innerHTML; // this main element under which 
                                                        //all you data
    var uri = 'data:application/vnd.ms-excel;base64,';
    var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>';
    var base64 = function (s) {
        return window.btoa(unescape(encodeURIComponent(s)))
    };
    
    var format = function (s, c) {
        return s.replace(/{(\w+)}/g, function (m, p) {
            return c[p];
        })
    };
    
    var ctx = {
        worksheet: 'Worksheet',
        table: '<table>' + htmls + '</table>'
    }
    
    var compareLink = document.createElement("a");
    compareLink.download = "Compare_Test.xls";
    compareLink.href = uri + base64(format(template, ctx));
    compareLink.click();
    }
    
    函数下载到excel(){
    var htmls=$(“#compareBodyContent”)[0]。innerHTML;//此主元素在其中
    //你所有的数据
    var uri='数据:application/vnd.ms excel;base64';
    var模板=“{table}”;
    var base64=函数{
    返回窗口.btoa(unescape(一个或多个组件)))
    };
    var格式=函数(s,c){
    返回s.replace(/{(\w+)}/g,函数(m,p){
    返回c[p];
    })
    };
    变量ctx={
    工作表:“工作表”,
    表:“”+htmls+“”
    }
    var compareLink=document.createElement(“a”);
    compareLink.download=“Compare\u Test.xls”;
    compareLink.href=uri+base64(格式(模板,ctx));
    compareLink.click();
    }
    

    希望这对你有帮助。如果您对此有任何疑问,请告诉我。

    如果您在视图中显示的数据是以html的形式显示的,您可以使用javascript进行操作。您是否尝试将其导出到文件以供下载或显示?我正在尝试将其导出到excel文件以供下载。目前它按场景分组下载,我希望按场景分组下载另一个表Username@ManjoKS谢谢,java脚本可以工作,并且可以从视图中导出所有表。尽管所有表格都在工作表上导出。如何在单独的工作表中导出每个表。就像第1页上的场景,第2页上的用户名等等。非常感谢你的帮助。谢谢,很高兴知道。您可以在Google中找到要在单独的工作表中导出的内容。我已经给出了一个想法,你们需要解决它。
    public FileContentResult DownloadReport(DateTime start, DateTime end)
            {
    
                //var uName = User.Identity.Name;
    
                var fileDownloadName = String.Format("Report.xlsx");
                const string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    
    
                // Pass your ef data to method
    
    
                ExcelPackage package = GenerateExcelFile(db.Chats.Where(x => System.Data.Entity.DbFunctions.TruncateTime(x.ChatCreateDateTime) >= start && System.Data.Entity.DbFunctions.TruncateTime(x.ChatCreateDateTime) <= end)
                                .GroupBy(a => a.ScenarioList).Select(b => new ReportVM()
                                {
                                    ScenName = b.Key,
                                    Count = b.Count()
                                }).ToList());
    
    
                var fsr = new FileContentResult(package.GetAsByteArray(), contentType);
                fsr.FileDownloadName = fileDownloadName;
    
                return fsr;
    
            }
    
            private static ExcelPackage GenerateExcelFile(IEnumerable<ReportVM> datasource)
            {
    
                ExcelPackage pck = new ExcelPackage();
    
    
                //Create the worksheet 
                ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Sheet 1");
    
                
                // Sets Headers
                ws.Cells[1, 1].Value = "Scenario";
                ws.Cells[1, 2].Value = "No.Of Chats";
    
    
                // Inserts Data
                for (int i = 0; i < datasource.Count(); i++)
                {
                    ws.Cells[i + 2, 1].Value = datasource.ElementAt(i).ScenName;
                    ws.Cells[i + 2, 2].Value = datasource.ElementAt(i).Count;
                }
    
                //Sheet2
                
    
    
                // Format Header of Table
                using (ExcelRange rng = ws.Cells["A1:B1"])
                {
    
                    rng.Style.Font.Bold = true;
                    rng.Style.Fill.PatternType = ExcelFillStyle.Solid; //Set Pattern for the background to Solid 
                    rng.Style.Fill.BackgroundColor.SetColor(Color.Gold); //Set color to DarkGray 
                    rng.Style.Font.Color.SetColor(Color.Black);
                }
                return pck;
            }
    
    function DownloadToExcel() {
    
    var htmls = $("#compareBodyContent")[0].innerHTML; // this main element under which 
                                                        //all you data
    var uri = 'data:application/vnd.ms-excel;base64,';
    var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>';
    var base64 = function (s) {
        return window.btoa(unescape(encodeURIComponent(s)))
    };
    
    var format = function (s, c) {
        return s.replace(/{(\w+)}/g, function (m, p) {
            return c[p];
        })
    };
    
    var ctx = {
        worksheet: 'Worksheet',
        table: '<table>' + htmls + '</table>'
    }
    
    var compareLink = document.createElement("a");
    compareLink.download = "Compare_Test.xls";
    compareLink.href = uri + base64(format(template, ctx));
    compareLink.click();
    }