excelportCSV如何下载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excelportCSV如何下载相关的知识,希望对你有一定的参考价值。

参考技术A 直接在系统中下载。
CSV格式是一种常见的数据文件格式,一些数据库导入数据文件要求必须是CSV格式的:1、打开Excel数据表。2、点击文件,选择另存为。3、选择文件的保存位置。4、选择保存类型为csv。5、点击确定即可。
csv格式的文件是一种纯文本格式,因此,某个单元格中的数字,哪怕设置成了文本属性或者特殊属性,另存为csv格式文件后,这些特性会被丢失的。

如何下载文件

【中文标题】如何下载文件【英文标题】:How to Download File 【发布时间】:2013-09-29 17:17:46 【问题描述】:

我一直在关注下面列出的这些链接,我找到了编写这个 SMALL 创建 Excel 和下载功能的最佳方法。 (在 Excel 中使用 EPPlus)

Download file of any type in Asp.Net MVC using FileResult? + How to convert an Stream into a byte[] in C#? Using a FileStreamResult with a MemoryStream in ASP.NET MVC 3 Writing A Custom File Download Action Result For ASP.NET MVC

每次我运行它时它都会完美无误地运行代码,但不会“踢出”要下载的文件(在另存为对话框或 w/e 中)。

public ActionResult ShowReport()
    
        using (var stream = new MemoryStream())
        

            ExcelPackage pck = new ExcelPackage();
            var ws = pck.Workbook.Worksheets.Add("Sample1");

            ws.Cells["A1"].Value = "Sample 1";
            ws.Cells["A1"].Style.Font.Bold = true;
            var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
            shape.SetPosition(50, 200);
            shape.SetSize(200, 100);
            shape.Text = "Sample 1 text text text";

            var fileDownloadName = "sample.xlsx";
            var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//System.Net.Mime.MediaTypeNames.Application.Octet
            var fileStream = new MemoryStream();
            pck.SaveAs(fileStream);
            fileStream.Position = 0;

            var fsr = new FileStreamResult(fileStream, contentType);
            fsr.FileDownloadName = fileDownloadName;

            byte[] fileBytes = ReadToEnd(fileStream);
            string fileName = "example";
            return File(fileBytes, contentType, fileName);
        
    

我做错了什么/错过了什么? - 我必须自己写那个对话吗?

PN:我也尝试过这种方式

 byte[] fileBytes = ReadToEnd(fileStream);
 string fileName = "example";
 return File(fileBytes, contentType, fileName);

当然,我必须弄清楚如何将 Stream 转换为 Byte,但它也没有显示任何内容。

Chrome 网络开发工具的图片 抱歉,如果您使用支持的浏览器,小图片(如果您无法使用 ctl+MouseWheel 滚动查看)。

【问题讨论】:

最后一行代码(“没有显示任何东西”)是正确的方法。请详细说明它没有显示任何内容。服务器是否有响应?当你调试这个时,它在哪里失败了? 好吧,我在 Chrome 中使用 HTTP 标头和其他扩展程序以及其他一些扩展程序打开了我的浏览器,并打开了开发者工具,这不会显示任何“出错”的迹象。我还能说什么,是的,我在 VS 中单步执行了我的代码,没有任何缺陷? 在浏览器的调试工具中,服务器的响应是什么?是否有一个实际文件通过并且它是空的和/或损坏的?如果您在服务器端保存文件,它是有效文件吗? 我没有尝试在服务器端保存它,请允许我一些时间尝试一下,就浏览器而言,它没有向我显示任何有关任何文件的信息。 (控制台为空)。 奇怪的是浏览器不显示任何东西。应该有 something (可能在网络选项卡上?我不熟悉 Chrome 的工具 UI)描述发送到服务器的请求和从服务器接收到的响应。你是如何提出请求的?它是一个链接,一个表单帖子,也许你正试图通过 AJAX 做到这一点? (如果是后者,那么 that 可能是问题所在,而不是服务器端代码中的任何内容。由于浏览器处理 AJAX 响应的方式与正常响应不同。不会t 是保存文件的对话框。) 【参考方案1】:

(回应上面的评论。)

从发布的图片来看,实际的文件请求(列表中的最后一个)似乎来自 JavaScript 代码,而不是来自正常的文档级请求。鉴于此,极有可能服务器端代码正常工作并返回正确的响应。

但是,由于它是一个 AJAX 请求,浏览器实际上并不知道如何处理响应。有一些潜在的解决方案here。理想情况下,您会希望将此作为正常请求并尽可能从图片中删除 AJAX。如果这不是一个选项,您仍然可以从 JavaScript 发起文档级请求。就这么简单:

window.location = '@Url.Action("Method", "Controller")';

这将像当前一样从 JavaScript 代码启动,但将针对整个浏览器而不是 AJAX 请求。这应该可以解决问题。

【讨论】:

非常感谢您的链接!【参考方案2】:

使用您拥有的内存流,您可以在保存 Excel 包后简单地将其传递给 Response 对象

代码:

    Response.AddHeader("content-disposition", "attachment;filename=FILENAME.xlsx")
    Response.Charset = String.Empty
    Response.ContentType = "application/ms-excel"
    Response.BinaryWrite(stream.ToArray())
    Response.End()

【讨论】:

从控制器操作返回 ActionResult 比直接写入 Response 对象首选。您的方法将控制器与 HTTP 上下文紧密耦合,使其可移植性大大降低,并且非常难以进行单元测试。

以上是关于excelportCSV如何下载的主要内容,如果未能解决你的问题,请参考以下文章

如何下载网页中的PDF文件

网页中pdf如何下载

请教如何下载加密视频

请问,如何批量下载网页内嵌的图片?

html 如何制作下载链接?

文件如何上传接口又如何下载下来