导出数据集以在c#中出类拔萃

时间:2011-05-26 10:06:12

标签: c# excel automation

我有将数据集的数据导出到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.Navin

1 个答案:

答案 0 :(得分:1)

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

中找到Excel

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

在那里,您可以设置Excel可以运行的权限等...

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

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

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

希望它有所帮助。