Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 电子表格保存方法没有执行任何操作,也没有错误_C#_Web_Save_Downloadfile_Gembox Spreadsheet - Fatal编程技术网

C# 电子表格保存方法没有执行任何操作,也没有错误

C# 电子表格保存方法没有执行任何操作,也没有错误,c#,web,save,downloadfile,gembox-spreadsheet,C#,Web,Save,Downloadfile,Gembox Spreadsheet,我一直在尝试使用Gembox将一些信息从我的web应用程序导出到excel电子表格中 调试时,我可以一步一步地完成SaveExcelFile方法的全部过程,但似乎什么也没有发生,没有下载任何文件,也没有错误,可以为我指明解决问题的正确方向 private void SaveExcelFile(ExcelDataModel excelDataModel) { var workbook = new ExcelFile(); ExcelW

我一直在尝试使用Gembox将一些信息从我的web应用程序导出到excel电子表格中

调试时,我可以一步一步地完成SaveExcelFile方法的全部过程,但似乎什么也没有发生,没有下载任何文件,也没有错误,可以为我指明解决问题的正确方向

private void SaveExcelFile(ExcelDataModel excelDataModel)
    {            
        var workbook = new ExcelFile();
        ExcelWorksheet employeesWorksheet = workbook.Worksheets.Add("Employees");
        ExcelWorksheet contractsWorksheet = workbook.Worksheets.Add("Contracts");

        employeesWorksheet.Cells["A1"].Value = "Employees:";
        employeesWorksheet.InsertDataTable(excelDataModel.EmployeeDatatable,
            new InsertDataTableOptions
            {
                ColumnHeaders = true,
                StartRow = 3
            });

        contractsWorksheet.Cells["A1"].Value = "Contracts:";
        contractsWorksheet.InsertDataTable(excelDataModel.ContractDatatable,
            new InsertDataTableOptions
            {
                ColumnHeaders = true,
                StartRow = 3
            });

        workbook.Save("Employees.xls");
    }
传入的模型仅包含两个数据表:

    public class ExcelDataModel
{
    public DataTable EmployeeDatatable { get; set; }
    public DataTable ContractDatatable { get; set; }

}
我正在从以下位置调用我的SaveExcelFile方法:

public async Task<ActionResult> ExportEmployees()
    {
        SpreadsheetInfo.SetLicense(ConfigurationManager.AppSettings["GemBoxSpreadsheetSerialKey"]);

        var response = await **I have removed the call/url but this just calls a controller method on the api**;
        if (response.IsSuccessStatusCode)
        {
            var data = response.Content.ReadAsStringAsync().Result;
            var model = JsonConvert.DeserializeObject<ExcelDataModel>(data);

            SaveExcelFile(model);
            return Json(new { success = true, message = "Successfully exported employees" }, JsonRequestBehavior.AllowGet);
        }

        return Json(new { success = false, message = "Failed to export employees to excel" }, JsonRequestBehavior.AllowGet);
    }
公共异步任务ExportEmployees()
{
SpreadsheetInfo.SetLicense(ConfigurationManager.AppSettings[“GemBoxSpreadsheetSerialKey”]);
var response=wait**我已经删除了调用/url,但这只是调用api上的控制器方法**;
if(响应。IsSuccessStatusCode)
{
var data=response.Content.ReadAsStringAsync().Result;
var model=JsonConvert.DeserializeObject(数据);
保存EXCEL文件(模型);
返回Json(新的{success=true,message=“Successfully exported employees”},JsonRequestBehavior.AllowGet);
}
返回Json(新的{success=false,message=“未能将员工导出到excel”},JsonRequestBehavior.AllowGet);
}
传入的模型看起来不错,它的数据表中填充了正确的数据。

工作簿.Save(“Employees.xls”)方法将文件保存到指定的路径,如果是相对路径(如您的路径),它将相对当前工作目录进行保存

要下载文件,需要使用
FileResult
而不是
JsonResult
,如中所示

//将“void”更改为“MemoryStream”,并添加了“SaveOptions”。
私有内存流SaveExcelFile(ExcelDataModel ExcelDataModel、SaveOptions)
{
// ...
//已将保存从路径更改为流。
var stream=newmemoryStream();
工作簿。保存(流、选项);
回流;
}
公共异步任务ExportEmployees()
{
// ...
if(响应。IsSuccessStatusCode)
{
var data=response.Content.ReadAsStringAsync().Result;
var model=JsonConvert.DeserializeObject(数据);
//将“JsonResult”更改为“FileResult”。
var excelOptions=SaveOptions.XlsDefault;
使用(var excelStream=SaveExcelFile(模型,excelOptions))
返回文件(excelStream.ToArray(),excelOptions.ContentType,“Employees.xls”);
}
返回Json(新的{success=false,message=“未能将员工导出到excel”},JsonRequestBehavior.AllowGet);
}

非常感谢!这真的很有帮助,它现在工作得很好!
// Changed "void" to "MemoryStream" and added "SaveOptions".
private MemoryStream SaveExcelFile(ExcelDataModel excelDataModel, SaveOptions options)
{
    // ...

    // Changed saving from path to stream.
    var stream = new MemoryStream();
    workbook.Save(stream, options);
    return stream;
}

public async Task<ActionResult> ExportEmployees()
{
    // ...

    if (response.IsSuccessStatusCode)
    {
        var data = response.Content.ReadAsStringAsync().Result;
        var model = JsonConvert.DeserializeObject<ExcelDataModel>(data);

        // Changed "JsonResult" to "FileResult".
        var excelOptions = SaveOptions.XlsDefault;
        using (var excelStream = SaveExcelFile(model, excelOptions))
            return File(excelStream.ToArray(), excelOptions.ContentType, "Employees.xls");
    }

    return Json(new { success = false, message = "Failed to export employees to excel" }, JsonRequestBehavior.AllowGet);
}