我们当前的网站有几个html数据表,可以在客户端进行排序,然后他们想要导出到excel文件。我试图创建泛型方法,可以处理传递到控制器的任何表数据,并仅在内存中创建该文件。我只是使用一个简单的按钮单击事件来启动一个将JSON对象传递给控制器的ajax调用,如下所示:
var convertedTable = JSON.stringify({ myTableArray: myTableArray });
$.ajax({
type: 'POST',
url: '/TableToExcel',
data: JSON.stringify({ myTableArray: myTableArray }),
contentType: 'application/json; charset=utf-8',
dataType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
success: function (returnValue) {
window.location = '/Reports/Download?file=' + returnValue;
}
});
控制器现在很简单,并且在浏览器直接调用时返回文件。
public FileResult Index(List<string[][]> tableData)
{
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Sample2");
ws.Cells["A1"].Value = "Sample 2";
ws.Cells["A1"].Style.Font.Bold = true;
var stream = new MemoryStream(pck.GetAsByteArray());
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
我在FF调试器中一直收到错误的错误。这是处理这个问题的正确方法吗?
我也认为表单是更好的方法,但不确定是否可行,因为我需要在提交表单之前先处理表数据,并且需要使用POST来处理JSON对象。
任何有关处理此问题的最佳方法的建议也将受到赞赏。
答案 0 :(得分:2)
任何寻找答案的人。 你可以不这样做。 我实际上是试图将文件本身传回去。从我所阅读和确定的Ajax只接受字符串。我回来的所有例子都返回了保存的文件位置而不是文件本身。