使用ASP.NET,ExtJS5,SQL Server和ClosedXML。
我正在使用ExtJS调用数据库存储过程,并使用ClosedXML将结果保存到服务器上的excel文件中。
正在正确创建文件,并查看网络检查器,我可以验证文件是否正在下载,但我没有得到任何Save
对话。我发现的只是禁用弹出窗口的解决方案(我很乐意遇到这个问题)。
我尝试过使用Chrome,Firefox和IE,每个都有相同的故事。
调用服务的面板:
Ext.define('Table', {
xtype: 'file-table',
extend: 'Ext.grid.Panel',
title: 'Stuff for Excel',
hideHeaders: false,
cls: 'striped-grid',
store: 'Stuff for Excel Store',
requires: [
'Ext.grid.selection.SpreadsheetModel',
'Ext.grid.plugin.Clipboard'
],
selModel: {
type: 'spreadsheet',
rowSelect: false,
columnSelect: true
},
plugins: ['clipboard', 'gridfilters'],
features: [{
ftype: 'grouping',
hideGroupedHeader: true,
startCollapsed: true
}],
columns: [{
text: '#1',
dataIndex: 'Name',
flex: 1,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#2',
dataIndex: 'Type',
flex: 1,
hidden: true,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#3',
dataIndex: 'Sub-Type',
flex: 1,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#4',
dataIndex: 'Sub-sub Type',
flex: 1,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#5',
dataIndex: 'Weight',
xtype: 'numbercolumn',
renderer: function (value) {
var out = value * 100;
return out.toFixed(1) + ' %';
},
flex: 0
}],
viewConfig: {
stripeRows: true
},
bbar: [{
xtype: 'panel',
flex: 1
}, {
xtype: 'button',
margin: 5,
padding: 10,
text: 'Export to Excel',
hidden: false,
flex: 0,
icon: '../Images/ExportReport.png',
handler: function () {
Ext.Ajax.request({
method: 'GET',
loadMask: true,
url: 'ReportingWebServices.asmx/CreateExcel',
params: {
'here': are,
'some': params
}
})
}
}]
});
相关的服务器端代码
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)]
public void CreateExcel()
{
string fileName = "Workbook.xlsx";
string filePath = "path\to\file";
ClosedXML.Excel.XLWorkbook workBook = new ClosedXML.Excel.XLWorkbook();
// Passing params, getting results from database,
// building the spreadsheet
if (File.Exists(filePath + fileName))
{
File.Delete(filePath + fileName);
}
workBook.SaveAs(filePath + fileName);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
HttpContext.Current.Response.TransmitFile(filePath + fileName);
HttpContext.Current.Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
答案 0 :(得分:0)
@ Gusman的评论帮助我找出了我可以看的地方。问题确实存在于前端代码中。我在我的按钮处理程序中添加了一个附加了不可见iframe的函数。
p = perms(1:9);
S = p(:,1)+(13.*p(:,2)./p(:,3))+p(:,4)+(12.*p(:,5))-p(:,6)-11+(p(:,7).*p(:,8)./p(:,9))-10 == 66;
sum(S)
p(S,:)
我还修改了服务器代码,将文件保存到服务器上的临时文件夹中,供客户端检索。