首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >导出到Excel函数,在本地主机上工作,但在已发布的网站中不导出

导出到Excel函数,在本地主机上工作,但在已发布的网站中不导出
EN

Stack Overflow用户
提问于 2015-10-19 00:12:12
回答 3查看 2.3K关注 0票数 0

我有这段代码要将我的GridViews导出到Excel,它在本地主机上工作,但是在部署之后就不能工作了。单击导出按钮时收到的错误是运行时错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void EXPORT_BUTTON_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();

            // creating new WorkBook within Excel application
            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
            String DATA1 = "DATA1";
            String DATA2 = "DATA2";
            ExportToExcel(app, workbook, DATA_1, DATA1);
            workbook.Worksheets["Sheet1"].Delete();
            workbook.Worksheets["Sheet2"].Delete();
            workbook.Worksheets["Sheet3"].Delete();
            ExportToExcel(app, workbook, DATA_2, DATA2);
            string FolderPath = ServerName + DirectoryLocation + DirectoryFolder + ExportsFolder;
            var filename = @"EXCEL_" + datetime.ToString("dd-MM-yyyy_hh-mm-ss") + ".xlsx";
            workbook.SaveAs(FolderPath + filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            workbook.Close();
            app.Quit();
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment; filename=" + filename + ";");
            Response.TransmitFile(FolderPath + filename);
            Response.Flush();
            Response.End();
        }

        public void ExportToExcel(Microsoft.Office.Interop.Excel._Application app, Microsoft.Office.Interop.Excel._Workbook workbook, GridView gridview, string SheetName)
        {
            // see the excel sheet behind the program
            app.Visible = false;

            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets.Add();

            // changing the name of active sheet
            worksheet.Name = SheetName;

            // storing header part in Excel
            for (int i = 1; i < gridview.Columns.Count + 1; i++)
            {
                worksheet.Cells[1, i] = gridview.Columns[i - 1].HeaderText;
            }


            // storing Each row and column value to excel sheet
            for (int i = 0; i < gridview.Rows.Count - 1; i++)
            {
                for (int j = 0; j < gridview.Columns.Count; j++)
                {
                    worksheet.Cells[i + 2, j + 1] = gridview.Rows[i].Cells[j].Text.ToString();
                }
            }

        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-20 04:34:57

我使用EPPLUS解决了我的问题,EPPlus是一个使用Office格式(xlsx)读写Excel2007/2010文件的.net库。它不要求在服务器计算机上安装excel。谢谢。

以下代码可供参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void ExportToExcel_Click(object sender, EventArgs e)
    {
        var products = GetProducts();
        GridView1.DataSource = products;
        GridView1.DataBind();
        ExcelPackage excel = new ExcelPackage();
        var workSheet = excel.Workbook.Worksheets.Add("Products");
        var totalCols = GridView1.Rows[0].Cells.Count;
        var totalRows = GridView1.Rows.Count;
        var headerRow = GridView1.HeaderRow;
        for (var i = 1; i <= totalCols; i++ )
        {
            workSheet.Cells[1, i].Value = headerRow.Cells[i - 1].Text;
        }
        for (var j = 1; j <= totalRows; j++ )
        {
            for (var i = 1; i <= totalCols; i++)
            {
                var product = products.ElementAt(j-1);
                workSheet.Cells[j + 1, i].Value = product.GetType().GetProperty(headerRow.Cells[i - 1].Text).GetValue(product, null);
            }
        }
        using (var memoryStream = new MemoryStream())
        {
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment;  filename=products.xlsx");
            excel.SaveAs(memoryStream);
            memoryStream.WriteTo(Response.OutputStream);
            Response.Flush();
            Response.End();
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2015-10-19 01:17:47

'Microsoft.Office.Interop.Excel‘意味着必须安装Microsoft才能使此代码工作。

避免使用Microsoft.Office.Interop.Excel导出数据,因为它需要在服务器上安装应用程序,可伸缩性很差,并且违反MS许可条件。

我建议其他方法,如文本-csv导出,将满足更好的性能在服务器上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void EXPORT_BUTTON_Click(object sender, EventArgs e)
{
 ...
 StringBuilder sb = new StringBuilder();

 // storing header part in Excel
 for (int i = 1; i < gridview.Columns.Count + 1; i++)
 {
     sb.Append (gridview.Columns[i - 1].HeaderText);
     stringBuilder.Append(",");
 }

 sb.Append(Environment.NewLine);

 // storing Each row and column value to excel sheet
 for (int i = 0; i < gridview.Rows.Count - 1; i++)
 {
     for (int j = 0; j < gridview.Columns.Count; j++)
     {
       sb.Append (gridview.Rows[i].Cells[j].Text.ToString());
       stringBuilder.Append(",");
     }
     sb.Append(Environment.NewLine);
  }

  WriteToCSV(sb.ToString(); 
}

public static void WriteToCSV(string text, string fileName)
  {
      string attachment = "attachment; filename="+fileName+DateTime.Now.ToString("yy-MM-dd")+".csv";
      HttpContext.Current.Response.Clear();
      HttpContext.Current.Response.ClearHeaders();
      HttpContext.Current.Response.ClearContent();
      HttpContext.Current.Response.AddHeader("content-disposition", attachment);
      HttpContext.Current.Response.ContentType = "text/csv;charset=utf8";
      HttpContext.Current.Response.AddHeader("Pragma", "public");

      HttpContext.Current.Response.Write('\uFEFF'); //this is BOM
      HttpContext.Current.Response.Write(text);
      HttpContext.Current.Response.End();
  }
票数 0
EN

Stack Overflow用户

发布于 2015-10-20 01:51:12

它失败的原因是没有安装Excel。这里还有其他选项(比如转换为CSV文件),但是如果您想按原样使用代码,最简单的方法可能就是在服务器上安装Excel!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33209566

复制
相关文章
Omnibus GitLab 使用说明
本文介绍了如何使用 Omnibus GitLab 进行部署和配置 GitLab,包括安装、配置、数据存储和邮件服务等方面的内容。
shaonbean
2018/01/02
1.3K0
gitlab升级(Omnibus packages)
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-8.7.0-ce.0.el6.x86_64.rpm
donghui
2019/04/19
8010
Gitlab-ci 构建
原因:服务端证书有问题。我使用的是自建的gitlab服务器,服务器上的证书差了一个属性。打印出来需要包含如下属性:
天地一小儒
2022/12/28
5350
omnibus-gitlab迁移记录 原
sudo scp 1462837514_gitlab_backup.tar root@x.x.x.x:/var/opt/gitlab/backups
donghui
2019/04/19
1.3K0
Gitlab-CI 中的 Pip 缓存的设置
最近给实验室的Gitlab服务器开启了CI功能,采用的是docker模式,每次都启动一个全新的镜像进行构建。
DevOps时代
2019/10/06
2.3K0
Gitlab-ci:从零开始的前端自动化部署
(1) 通过在项目根目录下配置**.gitlab-ci.yml**文件,可以控制ci流程的不同阶段,例如install/检查/编译/部署服务器。gitlab平台会扫描.gitlab-ci.yml文件,并据此处理ci流程
Nealyang
2020/09/01
1.9K0
Kubernetes 集群中运行 GitLab-Runner 来执行 GitLab-CI
GitLab-CI 是一套 GitLab 提供给用户使用的持续集成系统,GitLab 8.0 版本以后是默认集成并且默认启用。GitLab-Runner 是配合 GitLab-CI 进行使用的,GitLab 里面每个工程都会定义一些该工程的持续集成脚本,该脚本可配置一个或多个 Stage 例如构建、编译、检测、测试、部署等等。当工程有代码更新时,GitLab 会自动触发 GitLab-CI,此时 CitLab-CI 会找到事先注册好的 GitLab-Runner 通知并触发该 Runner 来执行预先定义好的脚本。
kubernetes中文社区
2019/06/24
2.8K0
Kubernetes 集群中运行 GitLab-Runner 来执行 GitLab-CI
Kubernetes 集群中运行 GitLab-Runner 来执行 GitLab-CI
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aixiaoyang168/article/details/81149264
哎_小羊
2019/05/25
3.1K0
如何利用Gitlab-CI持续部署到远程机器?
如果看过《基于docker-compose的Gitlab CI/CD实践&排坑指南》这篇文章的朋友,会注意到我是在 Gitlab-Runner服务器上自动部署的站点,本次我们结合ssh部署到远程机器(将CI服务器和部署服务器分离,避免资源抢占)。
有态度的马甲
2020/07/29
2.4K0
如何利用Gitlab-CI持续部署到远程机器?
gitlab-ci 配置复用 - reference tags
在 GitLab 13.9 中增加了一个新的关键字 !reference。这个关键字可以在任意位置复用已存在的配置。
老麦
2022/12/24
8660
gitlab-ci 配置复用 - reference tags
使用 vagrant 从搭建 gitlab server 开始体验整个 gitlab CI/CD 过程
GitLab一个开源的git仓库管理平台,方便团队协作开发、管理。在GitLab上可以实现完整的CI(持续集成)、CD(持续发布)流程。而且还提供了免费使用的Plan,以及免费的可以独立部署的社区版本。
用户7685359
2020/08/22
1K0
原 记在解决GitLab-CI下的Dock
问题描述 最近一直在测试GitLab下的Runner,并在其下实现CI,其中遇到Docker Image编译后推送到Gitlab的容器中心失败的问题. gitlab-ci.yml Runner 配置 在容器内执行完Docker镜像的编译后,自动推送到注册中心时,报如下错误: c2bf021f0c8d: Layer already exists cd7100a72410: Layer already exists dcf1253999b2: Pushed a7e843cd55f6: Pushed 4fef4e
霡霂
2018/06/04
1.3K0
Gitlab 从 12.1 版本开始不再支持 MySQL
Gitlab 官方 宣布 ,将从 12.1 版本开始不再支持 MySQL 数据库。早在 2017 年 7 月,Gitlab 就计划将弃用对 MySQL 的支持。而目前这个决定将从 12.1 版本开始。
Debian中国
2020/01/21
9890
Gitlab安装使用及汉化配置
一、GitLab简介 GitHub是2008年由Ruby on Rails编写而成,与业界闻名的Github类似;但要将代码上传到GitHub上面,而且将项目设为私有还要收费。GitLab 是一个用于
shaonbean
2018/01/02
6.3K0
玩转CVM:Gitlab安装搭建
本教程将讲解如何依托腾讯云主机(CVM),以Docker方式搭建Gitlab服务。具体将包括:Docker安装,Gitlab安装与配置,Gitlab的开发流程示例,以及基于Gitlab的持续集成(CI/CD)的介绍。
溪歪歪
2019/07/07
8.6K0
K8S容器环境下GitLab-CI和GItLab Runner 部署记录
注意:本示例部署所涉及到的image镜像均导入到Harbor私有私仓(172.16.60.230) 。
洗尽了浮华
2021/04/01
7.6K0
K8S容器环境下GitLab-CI和GItLab Runner 部署记录
SonarQube 之 gitlab-plugin 配合 gitlab-ci 完成每次 commit 代码检测
哎_小羊
2018/01/02
9.3K2
SonarQube 之 gitlab-plugin 配合 gitlab-ci 完成每次 commit 代码检测
『中级篇』docker之CI/CD持续集成-(终结篇)(77)
PS:学习这个技术一定要紧随时代的潮流,干IT没办法,逆水行舟不进则退!不断的追随docker的新技术,学习的东西一定要实践,最好在工作中,只有这样才能提高咱们自己的水平,遇到的问题多在 https://stackoverflow.com/ 进行查看大神们的解决方案,国内baidu太坑了,记住你遇到的问题可能很多时候都是小问题,小细节。还有一点是https://github.com上多看docker的源码。多提issue,有热心的人会帮咱们进行解答的。推荐使用https://google.com,自己解决问题。科学上网也是搞IT必须的。中级篇也就终结了,后面也会退出高级篇,希望各位老铁,学习愉快,工作顺利,少踩坑! 谢谢您一如既往的关注和支持我,后续高级篇继续相见!跪安了!
IT架构圈
2018/10/13
1.5K0
『中级篇』docker之CI/CD持续集成-(终结篇)(77)
用Gitlab玩CI/CD
持续集成(CONTINUOUS INTEGRATION)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
李俊鹏
2021/02/23
1.4K0
用Gitlab玩CI/CD
点击加载更多

相似问题

GitLab/GitLab-CI Omnibus包配置sidekiq并发

31

Gitlab Omnibus 7.8.0上gitlab-ci的配置

12

如何在Gitlab Omnibus中检查GO版本

244

gitlab-ci多java版本

130

如何更改Gitlab的8080端口(CE - Omnibus版本)?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文