将数据集导出到c#中的excel中
本文关键字:中的 excel 数据集 | 更新日期: 2023-09-27 17:57:39
我有一个功能,可以将数据集的数据导出到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();
web配置文件:
<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文件夹下的虚拟目录中。通过iisManager,我浏览了虚拟目录并运行了相同的页面,xml文件保存在相同的路径中,但没有列标题:(。。然后我通过URL(通过inetrnal ip地址)从其他机器打开了相同的页面,但xml文件没有保存到机器上。。请帮帮我。。
关于
T.Navin
强烈反对在服务上自动执行Word或Excel,但您可以在此处阅读有关它的一些注意事项。首先,您可以尝试将服务设置为以本地系统运行。另一件要玩的事情是在中找到Excel
控制面板-管理工具-组件服务-组件服务——我的电脑-DCOM配置
在那里你可以设置Excel可以运行的特权,等等…
但是,我不得不说,即使一切都设置好了,它仍然可能不起作用。我们在这方面遇到了巨大的困难,一些服务器可以工作,而完全相同的配置在其他服务器上无法工作。。。
因此,我建议(因为您的需求并不真正需要自动化)使用XSLT自己创建Excel文件来创建SpreadSheetML-这实际上比您最初想象的更容易,但这确实是一种很好的方法。尝试将XLS文件保存为OfficeXML2003格式,然后查看XML的结构——如果您查看正文,它实际上并没有那么复杂。当您创建这些XML时,Excel可以像打开任何其他文件一样打开它。
另一种方法(如果您不喜欢使用XSL转换)是使用Open XML Format SDK-我们发现在Word中实现它有点乏味(我们需要一些细微差别),所以我们仍然更喜欢XSLT,但对于Excel来说,它可能很容易。有了这个SDK,你甚至可以保存为XSLX/DOCX格式(实际上与ProcessingML非常相似,但打包在一个zip中)
希望能有所帮助。