急~~~~ 使用using Microsoft.Office.Interop.Excel 给定关键字不在字典中

问题描述

asp.net项目里面使用usingMicrosoft.Office.Interop.Excel组件做报表导出的使用报给定关键字不在字典中~~~~本地测试没有问题,上传到服务器上后报这个异常注:2008版本服务器麻烦各位帮忙看看,小弟先谢谢了///<summary>///DataSet导出Excel///</summary>///<paramname="page">页面对象</param>///<paramname="dv">用于导出的数据</param>///<paramname="tmpExpDir">文件路径</param>///<paramname="refFilenameStart">文件名前缀</param>///<paramname="refFilenameEnd">文件名后缀</param>///<paramname="sheetName">Sheet名称</param>///<paramname="sheetSize">sheet包含的数据行数,不包括标题行</param>///<paramname="setBorderLint">导出完成后,是否给数据加上边框线</param>///<paramname="sheetTableName">表名</param>///<paramname="CellName">表列名</param>///<paramname="TableDescription">表数据描述</param>///<paramname="totallist">合计业务</param>///<paramname="isClosePage">是否关闭页面</param>///<returns></returns>publicboolWebExportToExcel(System.Web.UI.Pagepage,DataSetdv,StringtmpExpDir,StringrefFilenameStart,StringrefFilenameEnd,String[]sheetName,intsheetSize,BooleansetBorderLint,String[]sheetTableName,Dictionary<string,string>CellName,String[]TableDescription,List<TotalBussiness>totallist,boolisClosePage){Int32RowsToDivideSheet=sheetSize;//计算sheet行数Int32sheetCount=dv.Tables.Count;GC.Collect();//回收其他垃圾Applicationexcel;_WorkbookxBk;_WorksheetxSt=null;objectobjOpt=System.Reflection.Missing.Value;excel=newApplication();xBk=excel.Workbooks.Add(true);try{//申请循环中要使用的变量Int32dvRowStart=0;Int32dvRowEnd;Int32rowIndex=0;Int32colIndex=0;//对全部Sheet进行操作for(intsheetIndex=0;sheetIndex<sheetCount;sheetIndex++){//设置初始化行和列rowIndex=1;colIndex=1;//计算起始行dvRowStart=1;//sheetIndex*RowsToDivideSheet//计算结束行dvRowEnd=RowsToDivideSheet;//dvRowStart+RowsToDivideSheet-1if(dvRowEnd>dv.Tables[sheetIndex].Rows.Count){dvRowEnd=dv.Tables[sheetIndex].Rows.Count+1;}//创建一个sheetif(null==xSt){xSt=(_Worksheet)xBk.Worksheets.Add(Type.Missing,Type.Missing,1,Type.Missing);}else{xSt=(_Worksheet)xBk.Worksheets.Add(Type.Missing,xSt,1,Type.Missing);}//设置SheetNamexSt.Name=sheetName[sheetIndex].ToString();#region//表头//设置表头Microsoft.Office.Interop.Excel.Rangerange=xSt.Range[excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,dv.Tables[sheetIndex].Columns.Count]];range.Merge(0);//设置表头格式//xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment=XlVAlign.xlVAlignCenter;//设置标题居中对齐range.HorizontalAlignment=XlVAlign.xlVAlignCenter;//设置单元格为文本range.NumberFormatLocal="@";//xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).Font.Bold=true;range.Font.Size=15;//excel.Cells[rowIndex,colIndex++]=col.ColumnName;range.Font.Name="黑体";range.Borders.LineStyle=1;excel.Cells[1,1]=sheetTableName[sheetIndex];range=null;#endregion#region//表描述rowIndex++;range=xSt.Range[excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,dv.Tables[sheetIndex].Columns.Count]];//设置单元格为文本range.NumberFormatLocal="@";range.Font.Size=12;excel.Cells[rowIndex,dv.Tables[sheetIndex].Columns.Count]=TableDescription[sheetIndex];range=null;rowIndex++;#endregion//取得标题for(intcol=0;col<dv.Tables[sheetIndex].Columns.Count;col++){Microsoft.Office.Interop.Excel.Ranger=xSt.Range[excel.Cells[rowIndex,col+1],excel.Cells[rowIndex,col+1]];//设置标题格式//xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment=XlVAlign.xlVAlignCenter;r.HorizontalAlignment=XlVAlign.xlVAlignCenter;//设置单元格为文本r.NumberFormatLocal="@";r.Font.Name="黑体";//设置标题居中对齐//xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).Font.Bold=true;r.Font.Bold=true;r.ColumnWidth=17;//填值,并进行下一列//excel.Cells[rowIndex,colIndex++]=col.ColumnName;Stringaa=CellName[(sheetIndex.ToString()+"|"+(col).ToString())];excel.Cells[rowIndex,col+1]=aa;}TotalBussinesstotal=null;total=totallist.Find(b=>b.Index==sheetIndex);//取得DataSet中的数据foreach(DataRowdrindv.Tables[sheetIndex].Rows){//新起一行,当前单元格移至行首rowIndex++;colIndex=1;for(inti=0;i<dv.Tables[sheetIndex].Columns.Count;i++){Stringaa=dr[i].ToString();if(total!=null&&total.IsTotal&&total.ListIndex!=null&&total.ListIndex.Count>0){if(total.ListIndex.ContainsKey(sheetIndex.ToString()+"|"+(i).ToString())){Decimaltotalnum=Winkk.HelpUtility.ParseHelper.DecimalParse(total.ListIndex[sheetIndex.ToString()+"|"+(i).ToString()],0);totalnum+=Winkk.HelpUtility.ParseHelper.DecimalParse(dr[i],0);total.ListIndex.Remove(sheetIndex.ToString()+"|"+(i).ToString());total.ListIndex[sheetIndex.ToString()+"|"+(i).ToString()]=totalnum.ToString();}}range=xSt.Range[excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]];range.NumberFormatLocal="@";range.Font.Size=12;range.Borders.LineStyle=1;excel.Cells[rowIndex,colIndex]=""+aa+"";colIndex++;}}for(intsty=0;sty<2;sty++){rowIndex++;//取得空格格式foreach(DataColumncolindv.Tables[sheetIndex].Columns){Int32colindex=1;Microsoft.Office.Interop.Excel.Ranger=xSt.Range[excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]];//设置标题格式//xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment=XlVAlign.xlVAlignCenter;r.HorizontalAlignment=XlVAlign.xlVAlignCenter;//设置单元格为文本r.NumberFormatLocal="@";range.Borders.LineStyle=1;range.Font.Name="黑体";range.Font.Size=12;//设置标题居中对齐//xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).Font.Bold=true;//填值,并进行下一列//excel.Cells[rowIndex,colIndex++]=col.ColumnName;excel.Cells[rowIndex,colindex]="";colindex++;}}

解决方案

解决方案二:
代码没发完...#region//合计if(total!=null&&total.IsTotal&&total.ListIndex!=null&&total.ListIndex.Count>0){rowIndex++;range=xSt.Range[excel.Cells[rowIndex,1],excel.Cells[rowIndex,1]];range.HorizontalAlignment=XlVAlign.xlVAlignCenter;range.NumberFormatLocal="@";range.Font.Name="黑体";range.Font.Size=12;range.Borders.LineStyle=1;excel.Cells[rowIndex,1]="合计:";for(intcol=1;col<dv.Tables[sheetIndex].Columns.Count;col++){range=xSt.Range[excel.Cells[rowIndex,col+1],excel.Cells[rowIndex,col+1]];range.HorizontalAlignment=XlVAlign.xlVAlignDistributed;range.NumberFormatLocal="@";range.Font.Name="黑体";range.Font.Size=12;range.Borders.LineStyle=1;if(total.ListIndex.ContainsKey(sheetIndex.ToString()+"|"+col.ToString())){excel.Cells[rowIndex,col+1]=Decimal.Parse(total.ListIndex[sheetIndex.ToString()+"|"+col.ToString()]).ToString("#.##");}else{excel.Cells[rowIndex,col+1]="";}}}#endregionRangeallDataWithTitleRange=xSt.Range[excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]];allDataWithTitleRange.Select();allDataWithTitleRange.Columns.AutoFit();if(setBorderLint){allDataWithTitleRange.Borders.LineStyle=1;}}StringrefFilename=Guid.NewGuid().ToString()+".xls";//Sheet循环结束StringabsFileName=HttpContext.Current.Server.MapPath(System.IO.Path.Combine(tmpExpDir,refFilename));if(System.IO.File.Exists(absFileName)){System.IO.File.Delete(absFileName);}xBk.SaveAs(absFileName,Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7,null,null,false,false,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,null,null,null,null,null);xBk.Close(false,objOpt,objOpt);excel.Quit();System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);xBk=null;excel=null;xSt=null;GC.Collect();stringdownloadFileName=refFilenameStart+refFilenameEnd+".xls";//page.Response.Write("<metahttp-equiv=Content-Typecontent="text/html;charset=UTF-8">");page.Response.ContentEncoding=System.Text.Encoding.GetEncoding("UTF-8");page.Response.AppendHeader("Content-Disposition","attachment;filename="+System.Web.HttpUtility.UrlEncode(downloadFileName,System.Text.Encoding.UTF8));page.Response.ContentType="application/vnd.ms-excel";page.Response.WriteFile(absFileName);page.Response.Flush();//if(System.IO.File.Exists(absFileName))//System.IO.File.Delete(absFileName);}catch(Exceptionex){if(excel!=null){try{foreach(Microsoft.Office.Interop.Excel.Workbookwbinexcel.Workbooks){if(wb!=null){try{wb.Saved=true;}catch(Exceptione){LogHelper.WriteLog(LogType.SysException,Winkk.LogUtility.LogHelper.CreateSysErrorLogInstance(SysErrorLogType.SystemEL,9999,ex.StackTrace,e));throwe;}}}excel.Workbooks.Close();excel.Quit();excel=null;GC.Collect();}catch(Exceptionesg){LogHelper.WriteLog(LogType.SysException,Winkk.LogUtility.LogHelper.CreateSysErrorLogInstance(SysErrorLogType.SystemEL,9999,esg.StackTrace,esg));throwesg;}}LogHelper.WriteLog(LogType.SysException,Winkk.LogUtility.LogHelper.CreateSysErrorLogInstance(SysErrorLogType.SystemEL,9999,ex.StackTrace,ex));throwex;}finally{if(isClosePage)page.Response.End();}returntrue;}

解决方案三:
同遇到给定关键字不在字典中http://topic.csdn.net/u/20120208/09/4eeb9d3e-5c7e-4d3e-89d8-77bd45ffbb3c.html?46901
解决方案四:
求高人解答

时间: 2024-10-04 19:35:51

急~~~~ 使用using Microsoft.Office.Interop.Excel 给定关键字不在字典中的相关文章

Microsoft.Office.Interop.Excel.Application导出excel

问题描述 Microsoft.Office.Interop.Excel.Application导出excel Microsoft.Office.Interop.Excel.Application导出excel某单元格长度过长导致报错怎么解决 解决方案 首先检查你的文档中有没有这个问题.其次,检查你的单元格的类型.建议你先在excel中手工操作,并且录制宏,然后再照着生成的vba代码写. 解决方案二: C#学习之用Microsoft.office.interop.excel.dll导出excelM

clr excel-CLR工程,using Microsoft.Office.Interop.Excel后编译报错

问题描述 CLR工程,using Microsoft.Office.Interop.Excel后编译报错 目的:用VS2008创建CLR窗体工程后,需要导出数据到Excel 添加microsoft excel 11.0 object library后,代码里面写入using Microsoft.Office.Interop.Excel,编译就报错,非常的怪异. 哪位大虾帮忙看看什么原因?谢谢! .selectdemo.cpp(12) : error C2872: 'Application' :

跨列居中-请问 Microsoft.Office.Interop.Excel 命名空间

问题描述 请问 Microsoft.Office.Interop.Excel 命名空间 请问 Microsoft.Office.Interop.Excel 命名空间下 可以设置跨列居中吗 解决方案 你设置合并这些单元格,然后让文字居中就行,你在excel中能操作的,接口都支持 有npoi的库,操作起来很方便 解决方案二: //声明Excel.Range Microsoft.Office.Interop.Excel.Range Myrange; 如:Myworksheet.get_Range("A

Microsoft.Office.Interop.Excel

问题描述 Microsoft.Office.Interop.Excel命名空间下请问可以设置跨列居中吗是跨列居中不是合并 解决方案 解决方案二:操作一个设置好格式的Excel解决方案三:设置range,然后对range设置样式,居中=xxxacrossxxxx,这玩意N久不搞了,大体就这个意思.你在vs里有提示,一看就明白了解决方案四:其实你在那个群里问了很多天,我们已经告诉你办法了.最直接的搞法是aspose.cells,虽然是商业版软件,不过么天朝特色在这里,俺们就不多说了你现在用vsto方

Microsoft.Office.Interop.Excel问题,如何将文件另存为

问题描述 Microsoft.Office.Interop.Excel.ApplicationClassexcel=newMicrosoft.Office.Interop.Excel.ApplicationClass();excel.Application.Workbooks.Add(true);excel.Visible=true;for(inti=0;i<this.eInfo.ColumnCount;i++){excel.Cells[1,i+1]=this.eInfo.Columns[i].

关于Microsoft.Office.Interop.Excel急救解决!

问题描述 编译器错误消息:CS1705:程序集"ICement.Buying.Web,Version=2.0.7.1843,Culture=neutral,PublicKeyToken=null"所使用的"Microsoft.Office.Interop.Excel,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"版本高于所引用的程序集"Microsoft.Office.In

Microsoft.Office.Interop.Excel.dll的问题

问题描述 本机未安装office,使用Microsoft.Office.Interop.Excel.Applicationapp=newApplicationClass(){DisplayAlerts=false};在设置属性DisplayAlerts时会报错!该程序集和Excel程序什么关系??是因为没有安装office挑错吗?? 解决方案 解决方案二:客户机器上没有安装Office你是用不了相关组件的,不要浪费力气了.dll引用是与名称无关的,.net在引用Com组件会自动生成一个dll,里

无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。

winform下对datagridview进行导出时候,写了一句: Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); 导致结果如下: 类型"Microsoft.Office.Interop.Excel.ApplicationClass"未定义构造函数    无法嵌入互操作类型"Microsoft.Office.Int

windows-求大神指点Microsoft.Office.Interop.Excel使用

问题描述 求大神指点Microsoft.Office.Interop.Excel使用 要用Microsoft.Office.Interop.Excel有格式 导出Excel 发现windows 家庭版本的调用 这库函数会出错 ,是不是家庭板还有底层相关的内库要单独安装了 解决方案 Microsoft.Office.Interop.Excel的用法Microsoft.Office.Interop.Excel的用法Microsoft.Office.Interop.Excel的用法 解决方案二: Ac