【问题标题】:export dataset to excel in c#在c#中将数据集导出到excel
【发布时间】:2011-09-02 11:19:13
【问题描述】:

我具有将数据集的数据导出到 Excel 工作表的功能。 它在本地机器上工作正常 但是当我将代码上传到服务器时它不起作用....

文件后面的代码:

    using Excel = Microsoft.Office.Interop.Excel;
    using System.Reflection;
    using System.Drawing;
    using System.ComponentModel;
    using System.Windows.Forms;

     string FilePath = ConfigurationManager.AppSettings["dataqueryfile"]
                 + "dataquery_" + DateTime.Now.ToString("yyyyMMddhhmm") ;


                Excel.Application oXL;
                Excel.Workbook oWB;
                Excel.Worksheet oSheet;
                Excel.Range oRange;

                // Start Excel and get Application object. 
                oXL = new Excel.Application();

                // Set some properties 
                oXL.Visible = true;
                oXL.DisplayAlerts = false;

                // Get a new workbook. 
                oWB = oXL.Workbooks.Add(Missing.Value);


                // Get the active sheet 
                oSheet = (Excel.Worksheet)oWB.ActiveSheet;
                oSheet.Name = "DataQuery";

                // Process the DataTable 
                DataTable dt = ds.Tables[0];

                int rowCount = 1;
                foreach (DataRow dr in dt.Rows)
                {
                    rowCount += 1;
                    for (int i = 1; i < dt.Columns.Count + 1; i++)
                    {
                        // Add the header the first time through 
                        if (rowCount == 2)
                        {
                            oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
                        }
                        oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
                    }
                }

                // Resize the columns 
                oRange = oSheet.get_Range(oSheet.Cells[1, 1],
                              oSheet.Cells[rowCount, dt.Columns.Count]);
                oRange.EntireColumn.AutoFit();

                // Save the sheet and close 
                oSheet = null;
                oRange = null;


                oWB.SaveAs(FilePath + ".xls", Excel.XlFileFormat.xlWorkbookNormal,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    Excel.XlSaveAsAccessMode.xlExclusive,
                    Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value);
                oWB.Close(Missing.Value, Missing.Value, Missing.Value);
                oWB = null;
                oXL.Quit();

                // Clean up 
                // NOTE: When in release mode, this does the trick 
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();

网络配置文件:

      <add key="dataqueryfile" value="C:\navin\"/>
      <add assembly="Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>
  <add assembly="office, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>
            <add assembly="Microsoft.Vbe.Interop, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>
            <add assembly="stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

编辑:

                da = new SqlDataAdapter();
                conn.Open();
                da.SelectCommand = command;
                da.Fill(ds);
                ds.WriteXml("c:\\Customers.xml");

当我从本地系统执行解决方案时,数据集值与列标题一起复制到 xml 文件中。然后我将文件移动到 inetpub 文件夹下的虚拟目录。通过 iis 管理器,我浏览了虚拟目录并运行相同的页面,xml 文件被保存在相同的路径中,但没有列标题:(.. 然后我通过 URL(通过 inetrnal ip 地址)从其他机器上打开了相同的页面,但是 xml 文件没有保存到机器上。 请帮帮我..

谢谢你

T.纳文

【问题讨论】:

  • 您忘记发布当应用程序“不工作”时收到的错误消息/堆栈跟踪/日志文件条目。
  • 我没有收到任何错误消息...文件没有下载到指定的文件夹中...当我从本地计算机运行时,它被保存在文件夹中..
  • 除非您能提供一些信息,例如错误消息或堆栈跟踪,否则我认为您不会得到任何有用的答案。
  • @mdm - 我们遇到了类似的问题 - 没有异常,没有错误日志,什么都没有 - 只是文件丢失了......所以我认为这个问题是有效的......
  • @veljkoz 你是怎么解决这个问题的。请帮帮我

标签: c# excel automation


【解决方案1】:

强烈建议不要在服务上自动化 Word 或 Excel,但您可以阅读有关它的一些注意事项here。首先,您可以尝试将您的服务设置为作为本地系统运行。其他可以玩的是在以下位置找到 Excel:

控制面板 - 管理工具 - 组件服务 - 组件服务 - 我的电脑 - DCOM 配置

您可以在此处设置 Excel 可以运行的权限等...

但是,我不得不说,即使一切设置正确,它仍然可能无法正常工作。我们在这方面遇到了很大的困难,一些服务器可以正常工作,而完全相同的配置在其他一些服务器上不能正常工作......

所以,我建议(因为您的需求并不真正需要自动化)是使用 XSLT 自己创建 Excel 文件来创建 SpreadSheetML - 它实际上比您一开始想象的要容易,但它确实是一个好方法。尝试将您的 XLS 文件保存为 Office XML 2003 格式,并查看 XML 的结构 - 如果您查看正文,它实际上并没有那么复杂。当您创建这些 XML 时,Excel 可以像打开任何其他文件一样打开它。

另一种方法(如果您不喜欢使用 XSL 转换)是使用 Open XML Format SDK - 我们发现实现 Word 有点乏味(我们需要一些细微差别)所以我们仍然更喜欢 XSLT,但是对于 Excel,它可以证明是相当容易的。使用此 SDK,您甚至可以保存为 XSLX/DOCX 格式(实际上与 Pr​​ocessingML 非常相似,但打包成一个 zip)

希望对你有帮助。

【讨论】:

  • da.Fill(ds); ds.WriteXml("c:\\Customers.xml");当我从本地系统执行解决方案时,数据集值与列标题一起复制到 xml 文件中。然后我将文件移动到 inetpub 文件夹下的虚拟目录。通过 iis 管理器,我浏览了虚拟目录并运行相同的页面,xml 文件被保存在相同的路径中,但没有列标题。然后我通过 URL 从其他机器打开了相同的页面,但是 xml 文件没有保存到机器上。请帮帮我。
  • 这看起来像是一个权限问题 - 您的应用程序池使用哪个帐户运行?什么 IIS 版本?
  • 您是否将运行该应用程序池的凭据设置为本地系统而不是网络服务?
  • 我已将预定义的应用程序池设置为网络服务...我现在将更改为本地系统..然后运行我的程序然后我会告诉你..
  • @veljkoz,正如你所说,我已经更改了设置..但仍然面临同样的问题..它没有在本地系统中下载
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
相关资源
最近更新 更多