Javascript 如何在mvc中将图形与相应数据一起动态导出到excel工作表

Javascript 如何在mvc中将图形与相应数据一起动态导出到excel工作表,javascript,c#,jquery,.net,asp.net-mvc,Javascript,C#,Jquery,.net,Asp.net Mvc,有没有办法将图表导出到excel表格中,并包含相应的数据。目前,我已经创建了一个mvc应用程序,并在下载按钮中单击,我可以将数组中存储的数据导出到excel工作表中。但我的主要任务是将动态图形与数据一起带到excel中,并且当excel中的值被修改时,该图形应该会动态更改。请在这方面帮助我。我只是这方面的初学者,所以。。。。 这是我的controller.cs代码 public class HomeController : Controller { // // GET: /Ho

有没有办法将图表导出到excel表格中,并包含相应的数据。目前,我已经创建了一个mvc应用程序,并在下载按钮中单击,我可以将数组中存储的数据导出到excel工作表中。但我的主要任务是将动态图形与数据一起带到excel中,并且当excel中的值被修改时,该图形应该会动态更改。请在这方面帮助我。我只是这方面的初学者,所以。。。。 这是我的controller.cs代码

 public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }
    [HttpPost]

    public void  download()
    {
        var data = new[]{ 
                           new{ Name="Ram", Email="ram@techbrij.com", Phone="111-222-3333" },
                           new{ Name="Shyam", Email="shyam@techbrij.com", Phone="159-222-1596" },
                           new{ Name="Mohan", Email="mohan@techbrij.com", Phone="456-222-4569" },
                           new{ Name="Sohan", Email="sohan@techbrij.com", Phone="789-456-3333" },
                           new{ Name="Karan", Email="karan@techbrij.com", Phone="111-222-1234" },
                           new{ Name="Brij", Email="brij@techbrij.com", Phone="111-222-3333" }                       
                  };

        Response.ClearContent();
        Response.AddHeader("content-disposition", "attachment;filename=Contact.xls");
        Response.AddHeader("Content-Type", "application/vnd.ms-excel");
        WriteTsv(data, Response.Output);
        Response.End();
        Response.Write ("downloaded");
    }

    public void WriteTsv<T>(IEnumerable<T> data, TextWriter output)
    {
        PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
        foreach (PropertyDescriptor prop in props)
        {
            output.Write(prop.DisplayName); // header
            output.Write("\t");
        }
        output.WriteLine();
        foreach (T item in data)
        {
            foreach (PropertyDescriptor prop in props)
            {
                output.Write(prop.Converter.ConvertToString(
                     prop.GetValue(item)));
                output.Write("\t");
            }
            output.WriteLine();
        }
    }
}
公共类HomeController:控制器
{
//
//回家/
公共行动结果索引()
{
返回视图();
}
[HttpPost]
公开下载
{
var data=new[]{
新的{Name=“Ram”,电子邮件=”ram@techbrij.com,Phone=“111-222-3333”},
新的{Name=“Shyam”,电子邮件=”shyam@techbrij.com,Phone=“159-222-1596”},
新的{Name=“Mohan”,电子邮件=”mohan@techbrij.com,Phone=“456-222-4569”},
新的{Name=“Sohan”,电子邮件=”sohan@techbrij.com,Phone=“789-456-3333”},
新的{Name=“Karan”,电子邮件=”karan@techbrij.com,Phone=“111-222-1234”},
新的{Name=“Brij”,电子邮件=”brij@techbrij.com“,Phone=“111-222-3333”}
};
Response.ClearContent();
AddHeader(“内容处置”、“附件;文件名=Contact.xls”);
AddHeader(“内容类型”、“应用程序/vnd.ms excel”);
WriteTsv(数据、响应、输出);
Response.End();
答复。书面(“下载”);
}
public void WriteTsv(IEnumerable数据,TextWriter输出)
{
PropertyDescriptorCollection props=TypeDescriptor.GetProperties(typeof(T));
foreach(PropertyDescriptor道具中的道具)
{
output.Write(prop.DisplayName);//头
输出。写入(“\t”);
}
output.WriteLine();
foreach(数据中的T项)
{
foreach(PropertyDescriptor道具中的道具)
{
输出.写入(prop.Converter.ConvertToString(
道具价值(项目));
输出。写入(“\t”);
}
output.WriteLine();
}
}
}
}

在index.cshtml中

   @{
        ViewBag.Title = "Home Page";
    }

    <!DOCTYPE html>

    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
    </head>
    <body>
    @{using (Html.BeginForm("download","home"))
    {
         <div>
            <button>Download</button>
        </div>
    }}

    </body>
    </html>
@{
ViewBag.Title=“主页”;
}
指数
@{使用(Html.BeginForm(“下载”、“主页”))
{
下载
}}

我们以前做的是使用excel模板。以下是步骤:

  • 创建包含图表的excel文件。它应该引用一张有数据的表。默认情况下,数据表当然是空白的
  • 在C#中,操作此excel文件以将数据插入
  • 将文件返回给用户以供下载
  • 图表不应是动态的,也不应根据用户对数据表的更改而更改,因为这是参考的
  • 这是我能想到的最简单的一步。我可能没有给你确切的代码如何做,但我相信你可以在网上搜索它。
    希望我能提供帮助。

    您当前导出的文本文件内容类型错误,Excel正在(善意地(?)为您掩盖错误。如果需要图表,则必须导出
    .xlsx
    ,而不是文本。你可以使用OpenXml()或任何包装器(ClosedXml就是其中之一),因为OpenXml不是最明显的API。谢谢你提供的信息。正如我之前所说的,我在这个领域是新手。所以请帮助我更正我的代码。我应该在代码中做什么更改来实现这一点。你们这些人都是天才。代码答案太宽泛了。你可以用谷歌搜索如何操作c#中的xlsx文件。我一直在用谷歌搜索操作,但无法理解任何东西,因为我在这方面很差。请帮助。谢谢你的帮助。但是我拥有的数据可能会更改,相应地,图表也需要更改。如果我创建一个带有图表的excel工作表,当数据被修改时,它将如何改变。Excel图形是数据驱动的。你改变了数据,图表也改变了。当然,除非你在上面塞了一个预渲染的位图!是否可以将图形导出到excel而不作为图像@freedomn不知道这意味着什么——但如果你按照@TheProvost的步骤去做,你应该会很好的去做。@tittohomas我不知道你是如何创建图表的,所以我不知道。但是,如果您可以创建它的位图图像,则可以将其导出为excel文件作为图像。不过,您必须使用互操作库或第三方控件,而不是csv文件。我给你的步骤是最有活力的方法。如果导出图像,如果更改图像中的数据,图像将不会更改