一 要引用Microsoft.Office.Interop.Excel.dll 如果发布到服务器后 服务器要安装 office 软件,并配置Excel的DCOM权限.
如何配置可以参考这个博客 http://www.cnblogs.com/kdkler/p/3261814.html
索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:80070005。
具体解决方法如下:
1:在服务器上安装office的Excel软件.
2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORKSERVICE"用户,然后赋予"本地访问"权限.
这样,我们便配置好了相应的Excel的DCOM权限.
注意:这是在WIN2003上配置的,在2000,xp上,NETWORKSERVICE用户改为ASP.net用户。
/// <summary>
/// 保存数据到Excel文件
/// </summary>
/// <param name="filename"></param>
private void SaveVideoMsgToExcel(string filepath)
{
//debugLogwrite.WriteLog("1");
// 1. 创建Excel应用程序对象的一个实例,相当于我们从开始菜单打开Excel应用程序。
Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.Application();
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlsApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
Microsoft.Office.Interop.Excel.Range range = null;
try
{
//分组名称 能从页面获取到的
//string filepath = Server.MapPath("") + @"../../VideoPlayHistory/" + filename;
//名称规则“分组名称+当前日期”
//首先去获取文件名名称
//如果存在,就打开文件,先向里边写入数据
//如果不存在,创建一个问题件,向里边写入数据
//写入完成后保存文件,释放相关资源
//弹出文件导出对话框,让用户把文件保存到本地
if (xlsApp == null)
{
//debugLogwrite.WriteLog("3");
//对此实例进行验证,如果为null则表示运行此代码的机器可能未安装Excel
return;
}
else
{
worksheet.Cells[1, 1] = "时段/星期";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 1];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 14;
worksheet.Cells[1, 2] = "星期一";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 2];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 18;
worksheet.Cells[1, 3] = "星期二";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 3];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 18;
worksheet.Cells[1, 4] = "星期三";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 4];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 18;
worksheet.Cells[1, 5] = "星期四";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 5];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 18;
worksheet.Cells[1, 6] = "星期五";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 6];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 18;
worksheet.Cells[1, 7] = "星期六";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 7];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 18;
worksheet.Cells[1, 8] = "星期日";
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 8];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
range.ColumnWidth = 18;
//for (int i = 0; i < 8; i++)
//{
// worksheet.Cells[2, i + 1] = "fdssdfhdsgd;\nsdgdsgdsgdg;\ndsgfsdgds;";
//}
int r = 2;
foreach (TimespanOneWeek item in vdoOneWeek)
{
worksheet.Cells[r, 1] = item.starttime + "-" + item.endtime;
worksheet.Cells[r, 2] = GetVideoNames(item.vdomonday);
worksheet.Cells[r, 3] = GetVideoNames(item.vdotuesday);
worksheet.Cells[r, 4] = GetVideoNames(item.vdowednesday);
worksheet.Cells[r, 5] = GetVideoNames(item.vdothursday);
worksheet.Cells[r, 6] = GetVideoNames(item.vdofriday);
worksheet.Cells[r, 7] = GetVideoNames(item.vdosaturday);
worksheet.Cells[r, 8] = GetVideoNames(item.vdosunday);
r = r + 1;
}
xlsApp.Visible = false;
workbook.Saved = true;
workbook.SaveCopyAs(filepath);
}
}
catch (Exception)
{
throw;
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
workbook.Close(true, Type.Missing, Type.Missing);
workbook = null;
xlsApp.Quit();
xlsApp = null;
GC.Collect();
//debugLogwrite.WriteLog("4");
}
}
二
public void CreateTerminalExcel(List<TerminalMonitorInfo> dt, string fileName)
{
FileStream fs = new FileStream(Server.MapPath("~/terminal.xls"), FileMode.Create, FileAccess.Write);
//if (File.Exists(fileName))
//{
// File.Delete(fileName);
//}
StreamWriter rw = new StreamWriter(fs, Encoding.Default);//建立StreamWriter为写作准备;
try{
string head = "";
head += "终端名称" + "\t";
head += "MAC地址" + "\t";
head += "分组" + "\t";
head += "城市" + "\t";
head += "位置" + "\t";
head += "输出模式" + "\t";
head += "状态" + "\t";
head += "最后上线时间" + "\t";
head += "最后心跳时间" + "\t";
rw.WriteLine(head);
int count = dt.Count;
string values = "";
for (int intRowCount = 0; intRowCount < dt.Count; intRowCount++)
{
values += dt[intRowCount].Name + "\t";
values += dt[intRowCount].Mac.MacAddressString + "\t";
values += dt[intRowCount].GroupName + "\t";
values += dt[intRowCount].City + "\t";
values += dt[intRowCount].Location + "\t";
values += EnumDisplayNameAttribute.GetDisplayName(dt[intRowCount].OutputType) + "\t";
values += getOnline((int)(dt[intRowCount].IsOnline ? dt[intRowCount].Status : TerminalStatusStatus.Offline)) + "\t";
values += dt[intRowCount].LastAuthDate == null ? "" : dt[intRowCount].LastAuthDate.Value.ToString("yyyy-MM-dd HH:mm:ss") + "\t";
values += dt[intRowCount].LastHeartbeatTime == null ? "" : dt[intRowCount].LastHeartbeatTime.Value.ToString("yyyy-MM-dd HH:mm:ss") + "\t";
rw.WriteLine(values);
values = "";
}
}catch{
}
finally{
rw.Close();
fs.Close();
}
}