将数据表导出到 Excel asp

2024-02-12

我有一个将数据导出到 Excel 文件的网页。我遇到的唯一问题是,当我尝试打开 Excel 文件时,我收到一条消息:“您尝试打开的文件的格式与文件扩展名指定的格式不同。请验证该文件未损坏并且来自打开文件之前的可信来源。”。我怎样才能摆脱这个消息。为了进行导出,我使用了在另一篇文章中找到的函数。这是代码...

private void ExporttoExcel(DataTable table)
{
    //Response.Clear();
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.Buffer = true;
    HttpContext.Current.Response.ContentType = "application/excel";
    HttpContext.Current.Response.Write(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">");
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=TestingReports");
    HttpContext.Current.Response.Charset = "UTF-8";
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1252");
    // Sets font
    HttpContext.Current.Response.Write("<font style='font-size:10.0pt; font-family:Calibri;'>");
    HttpContext.Current.Response.Write("<BR><BR><BR>");
    // Sets the table border, cell spacing, border color, font of the text, background, foreground, font height
    HttpContext.Current.Response.Write("<Table bgColor='#ffffff' cellSpacing='0' cellPadding='0' style='font-size:10.0pt; font-family:Calibri; background:white;'> <TR>");
    // Am getting my grid's column headers
    int columnscount = table.Columns.Count;

    // Write in new column
    for (int j = 0; j < columnscount; j++)
    {
        HttpContext.Current.Response.Write("<Td style='font-size:15.0pt; text-align:center; width:80.0pt; border-width:1.0pt; border-color:#000000; border-style:solid; height:22.0pt;'>");
        // Get column headers  and make it as bold in excel columns
        HttpContext.Current.Response.Write("<B>");
        HttpContext.Current.Response.Write(table.Columns[j].ToString());
        HttpContext.Current.Response.Write("</B>");
        HttpContext.Current.Response.Write("</Td>");
    }
    HttpContext.Current.Response.Write("</TR>");

    // Write in new row
    foreach (DataRow row in table.Rows)
    {
        HttpContext.Current.Response.Write("<TR>");
        for (int i = 0; i < table.Columns.Count; i++)
        {
            HttpContext.Current.Response.Write("<Td style='width:80.0pt; text-align:center; border-width:0.5pt; border-color:#000000; border-style:solid; height:22.0pt;'>");
            HttpContext.Current.Response.Write(row[i].ToString());
            HttpContext.Current.Response.Write("</Td>");
        }
        HttpContext.Current.Response.Write("</TR>");
    }
    HttpContext.Current.Response.Write("</Table>");
    HttpContext.Current.Response.Write("</font>");
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();

    //Response.Write("TestingReports.xls");
    //Response.Flush();
    //Response.End();
}

任何帮助都感激不尽。先感谢您。


下面的方法用于从您的 C# 代码导出到 Excel。

// fileName = your file name like test.xls
// dt = your data table
// caption = it is caption which display on top of excel file.


 public static void Export(string fileName, DataTable dt, string Caption)
        {


            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
            HttpContext.Current.Response.Charset = "windows-1254"; //ISO-8859-13 ISO-8859-9  windows-1254

            HttpContext.Current.Response.AddHeader(
                "content-disposition", string.Format("attachment; filename={0}", fileName));
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            string header = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1254\" />\n<style>\n</style>\n</head>\n<body>\n";

            using (StringWriter sw = new StringWriter())
            {
                using (HtmlTextWriter htw = new HtmlTextWriter(sw))
                {
                    //  Create a form to contain the grid

                    Table table = new Table();
                    table.GridLines = GridLines.Horizontal;
                    //table.CellSpacing = 17;                                      

                    if (Caption.Trim() != "")
                        table.Caption = "<span style='background-color: #FFFFFF; color: #666666; font-size: 14pt; font-weight: bold; padding: 5px 0px; height: 30px;'>" + Caption + "</span>";

                    TableRow row = null;
                    row = new TableRow();
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        TableHeaderCell headerCell = new TableHeaderCell();
                        headerCell.Text = dt.Columns[i].ColumnName;
                        PrepareControlForExport(headerCell);
                        row.Cells.Add(headerCell);
                    }
                    table.Rows.Add(row);
                    foreach (DataRow rows in dt.Rows)
                    {
                        row = new TableRow();
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            TableCell RowCell = new TableCell();
                            RowCell.Text = rows[i].ToString();
                            PrepareControlForExport(RowCell);
                            row.Cells.Add(RowCell);
                        }
                        table.Rows.Add(row);
                    }

                    //  render the table into the htmlwriter
                    table.RenderControl(htw);

                    //  render the htmlwriter into the response
                    HttpContext.Current.Response.ContentType = "text/csv";
                    HttpContext.Current.Response.Write(header + sw.ToString());
                    HttpContext.Current.Response.End();

                 }
            }
        }

        private static void PrepareControlForExport(Control control)
        {
            for (int i = 0; i < control.Controls.Count; i++)
            {
                Control current = control.Controls[i];
                if (current is LinkButton)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
                }
                else if (current is ImageButton)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
                }
                else if (current is HyperLink)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
                }
                else if (current is DropDownList)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
                }
                else if (current is CheckBox)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
                }
                else if (current is Label)
                {
                    control.Controls.Remove(current);
                    control.Controls.AddAt(i, new LiteralControl((current as Label).Text));
                }

                if (current.HasControls())
                {
                    ReportExport.PrepareControlForExport(current);
                }
            }
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据表导出到 Excel asp 的相关文章

  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 为多语言 ASP.NET WebAPI 应用程序设置 CurrentCulture 的最佳位置

    基于这个问题 为多语言 ASP NET MVC Web 应用程序设置 CurrentCulture 的最佳位置 https stackoverflow com questions 8226514 best place to set curr
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 如何在服务器上保存用户凭据以在后台运行查询

    背景 我们有一个 ASP NET Silveright Web 应用程序 silverlight客户端显示用户 图形形式的特定数据 它从服务器请求数据 问题 由于服务器必须执行底层数据库查询 获取这些数据的成本很高 因此客户端必须等待 优化
  • 本地权威声明和外部提供商声明的混淆

    我正在创建一个简单的 WebApi 它允许用户与 Facebook 连接 当我从 facebook 获取 accessToken 时 我调用 RegisterExternal 创建 Asp Net Identity 记录并存储令牌中的声明
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 带有文件参数的 Jenkins 管道作业

    我正在整理一个 Jenkins 管道作业 该作业将采用文件参数 我可以触发该作业并将其指向一个文件 但是我找不到该文件的最终位置 在普通的自由式作业中 它将位于工作区中 上传的文件去哪儿了 或者文件参数当前不适用于管道 目前管道和文件参数存
  • VS2008:自动生成的文件和 XML 文档

    这与其说是一个问题 不如说是一个烦恼 我的项目包含许多自动生成的文件 使用 mgmtclassgen exe 当我生成 XML 文档时 我的精美注释库受到来自这些 autogen 文件的 xml 文档警告的困扰 有没有办法a 抑制为这些文件
  • CakePHP SQLSTATE[HY000][14]错误

    我正在尝试将当前的 CakePHP 2 x 应用程序升级到 3 x 我修复了命名空间和文件夹结构问题 现在我遇到了数据库问题 在我的测试服务器中 我创建了相同的 MySQL 数据库并授予用户访问权限 然后我就改变了config app ph
  • Python:列表中 Nan 的相等性?

    我只是想弄清楚这些结果背后的逻辑 gt gt gt nan float nan gt gt gt nan nan False I understand that this is because the eq method is define
  • iOS - 如何访问设备的文件库?

    我正在尝试构建一个可以打开设备上存储的任何 pdf 的应用程序 但我真的不知道如何获取这些文件的句柄 我搜索了文档 发现的每个类都假设我已经拥有该文件的句柄 我在这里一定缺少一些东西 有多种应用程序可以访问音频和图片文件 肯定有办法访问 p
  • 如何使用VBA从Excel工作表中的图片获取EXIF信息

    如何使用 VBA 从 Excel 工作表中的形状图片获取 EXIF 信息 如纬度 经度等 是否可以在不从工作表或压缩的 Excel 工作簿中提取或复制图片的情况下获得它 我可以使用以下代码迭代压缩文件夹内容 Public Sub ReadZ
  • 如何在 Blazor Server 中动态添加、删除输入文本框并获取值?

    我有 Blazor 服务器应用程序 如何在单击按钮时动态添加新的输入文本框并将其删除 并在单击提交按钮时获取所有输入文本框的值 以便将它们保存在数据库中 for int i count i gt 1 i div class row div
  • 在 Spring Boot 中使用@Profile

    我有 Spring Boot 应用程序 1 1 5 发布 并通过配置属性启用我的配置文件spring profiles active MyProfile 配置文件被正确激活 我可以通过正在创建的配置文件中的 bean 看到这一点 然后我有一
  • 从键盘获取输入,无需等待输入

    fgets 和 getch 等函数将等待用户输入 然后再继续 我想要的是这个功能 如果用户按 x 变量将开始递减 c 将使变量开始递增 问题是当我尝试获取输入时程序停止 我希望变量在等待用户输入时继续递增或递减并且不 冻结 我正在使用 Vi
  • 将密码重置添加到 Django Admin 会转到错误的 URL?

    我正在关注以下部分添加密码重置功能 https docs djangoproject com en 2 1 ref contrib admin adding a password reset feature到 Django Admin 它会
  • 为什么不从 WinRT 应用程序(在 StreamSocket 上)连接到 win32 应用程序(在 QTcpSocket 上)

    我正在开发一个带有 Metro 应用程序和 win32 桌面的 Windows 8 1 聊天客户端应用程序 问题是未在 Tcp 套接字上从 winrt 应用程序连接到 win32 应用程序 异常连接失败 错误未从其他计算机回复 有什么问题
  • SwiftUI [演示] / 尝试在已经演示的...上演示视图

    我正在开发一个 SwiftUI 应用程序 首先出现警告 然后出现错误 可能是因为我忽略了这些警告 我想展示我收到的警告 希望有人能指出我可能做错的事情 这是相关代码 struct CustomListView View var localL
  • 如何在 Swagger 中将 https:///swagger 更改为自定义

    我的任务是将 Swagger 安装到 Web API 项目中 已安装 来自 nuget 的最新版本的 Swashbuckle Swashbuckle Core Net45 和 Swashbuckle Net45 自定义 App Start
  • 将 .plist 文件解析为纯 XML C#

    我正在尝试使用 c 读取我的 Apple Safari 历史记录 该历史记录存储在 plist 文件中 但是我总是收到错误 并且我不确定正确的方法是什么 我尝试执行的代码是这样的 XmlDocument xmd new XmlDocumen
  • 如何使用 INotifyPropertyChanged 更新列表框项目

    我有一个列表框 它与对象集合进行数据绑定 我想修改项目的显示方式 以向用户显示这些对象之一是我的程序中的 START 对象 我尝试按照以下方式执行此操作 但列表框不会自动更新 使控制无效也不起作用 我能找到的唯一方法是完全删除数据绑定并再次
  • PHP:仅使用模数和指数进行 RSA 加密

    现在 我只有模数和指数 我应该如何在 PHP 中使用模数和指数进行加密 我花了很多时间在网上寻找答案 但毫无用处 谢谢你的时间 使用 phpseclib 一个纯粹的PHP RSA 实现 http phpseclib sourceforge
  • 在 Microsoft Bot Framework v4 中处理自适应卡 - Nodejs

    return new Promise resolve reject gt x context sendActivity text hi attachments CardFactory adaptiveCard menuJson 我正在尝试发
  • 使用 Xcode 12 访问 SwiftUI 中的 ViewModel 字段:“访问安装在视图之外的状态值”

    我认为这个错误消息对于 Xcode 12 中的 SwiftUI 来说是新的 因为它在 Google 中的点击率为 0 而消息本身相当通用 访问安装在视图之外的状态值 这将导致 Binding 的初始值恒定并且不会更新 我有以下代码 删除了一
  • HTML5 服务器发送的事件:如何设置 withCredentials 选项?

    根据WHATWG 服务器发送的事件 http www whatwg org specs web apps current work multipage comms html eventsource下面是使用的API事件源界面 Constru
  • 将数据表导出到 Excel asp

    我有一个将数据导出到 Excel 文件的网页 我遇到的唯一问题是 当我尝试打开 Excel 文件时 我收到一条消息 您尝试打开的文件的格式与文件扩展名指定的格式不同 请验证该文件未损坏并且来自打开文件之前的可信来源 我怎样才能摆脱这个消息