让C# Excel导入导出,支持不同版本的Office
2016-11-05 10:11
549 查看
<div id="article_details" class="details"> <div class="article_title"> <span class="ico ico_type_Repost"></span> <h1> <span class="link_title"><a href="/baidu_27474941/article/details/52410693"> 让C# Excel导入导出,支持不同版本的Office </a></span> </h1> </div> <div class="article_manage clearfix"> <div class="article_l"> <span class="link_categories"> 标签: <a href="http://www.csdn.net/tag/excel" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">excel</a><a href="http://www.csdn.net/tag/office" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">office</a><a href="http://www.csdn.net/tag/c%23" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">c#</a> </span> </div> <div class="article_r"> <span class="link_postdate">2016-09-02 08:54</span> <span class="link_view" title="阅读次数">311人阅读</span> <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)</span> <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('让C# Excel导入导出,支持不同版本的Office','52410693');return false;" title="收藏">收藏</a></span> <span class="link_report"> <a href="#report" onclick="javascript:report(52410693,2);return false;" title="举报">举报</a></span> </div> </div> <div class="embody" style="display:none" id="embody"> <span class="embody_t">本文章已收录于:</span> <div class="embody_c" id="lib" value="{"err":0,"msg":"ok","data":[]}"></div> </div> <style type="text/css"> .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px #ededed; } .embody_b{ margin:0 ; padding:10px 0; } .embody .embody_t,.embody .embody_c{ display: inline-block; margin-right:10px; } .embody_t{ font-size: 12px; color:#999; } .embody_c{ font-size: 12px; } .embody_c img,.embody_c em{ display: inline-block; vertical-align: middle; } .embody_c img{ width:30px; height:30px; } .embody_c em{ margin: 0 20px 0 10px; color:#333; font-style: normal; } </style> <script type="text/javascript"> $(function () { try { var lib = eval("("+$("#lib").attr("value")+")"); var html = ""; if (lib.err == 0) { $.each(lib.data, function (i) { var obj = lib.data[i]; //html += '<img src="' + obj.logo + '"/>' + obj.name + " "; html += ' <a href="' + obj.url + '" target="_blank">'; html += ' <img src="' + obj.logo + '">'; html += ' <em><b>' + obj.name + '</b></em>'; html += ' </a>'; }); if (html != "") { setTimeout(function () { $("#lib").html(html); $("#embody").show(); }, 100); } } } catch (err) { } }); </script> <div class="category clearfix"> <div class="category_l"> <img src="http://static.blog.csdn.net/images/category_icon.jpg"> <span>分类:</span> </div> <div class="category_r"> <label onclick="GetCategoryArticles('6370462','baidu_27474941','top','52410693');"> <span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">C#<em>(16)</em></span> <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;"> <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;"> <div class="subItem"> <div class="subItem_t"><a href="http://blog.csdn.net/baidu_27474941/article/category/6370462" target="_blank">作者同类文章</a><i class="J_close">X</i></div> <ul class="subItem_l" id="top_6370462"> </ul> </div> </label> </div> </div> <script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.js"></script> <div id="article_content" class="article_content"> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px; font-size:16px"><span style="margin:0px; padding:0px">问题:</span></span>最近在项目中遇到,不同客户机安装不同Office版本,在导出Excel时,发生错误。</p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> 找不到Excel Com组件,错误信息如下。</p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px; color:rgb(255,0,0)">未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到指定的文件。</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px; font-size:16px"><span style="margin:0px; padding:0px">解决方法:</span></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> 1.引用高版本的的Excel.dll组件,最新版本14.0.0 防止客户安装高版本如Office不能导出。</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> (<span style="margin:0px; padding:0px; color:rgb(255,102,0)">DLL组件可以兼容低版本,不能兼容高版本</span>)</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> 2.右键DLL属性,将引用的Excel.dll组件,<span style="margin:0px; padding:0px; color:rgb(255,102,0)">嵌入互操作类型为True</span>,特定版本=false .这一步非常关键。</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-fa 4000 mily:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> 嵌入互操作类型 改成True后,<span style="margin:0px; padding:0px; color:rgb(255,102,0)">生成时可能现有调用Excel的代码会报错</span>,引用<span style="margin:0px; padding:0px; color:rgb(255,102,0)">Microsoft.CSharp <span style="margin:0px; padding:0px; color:rgb(0,0,0)">命名空间,可以解决此问题。</span></span></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> 3.引用Excel 14.0.0 DLL组件方法,vs2012 右键添加引用->程序集->扩展->Microsoft.Office.Interop.Excel</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> Excel.dll <a target="_blank" title="Excel 14.0.0.0.dll" href="http://files.cnblogs.com/files/ichk/Microsoft.Office.Interop.Excel.rar" style="margin:0px; padding:0px; color:black">http://files.cnblogs.com/files/ichk/Microsoft.Office.Interop.Excel.rar</a><br style="margin:0px; padding:0px"> </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; color:rgb(255,102,0)"><span style="margin:0px; padding:0px; color:rgb(0,0,0)"><span style="margin:0px; padding:0px">其他方法:</span></span></span></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; color:rgb(255,102,0)"><span style="margin:0px; padding:0px; color:rgb(0,0,0)"> </span><span style="margin:0px; padding:0px; color:rgb(0,0,0)">1.使用NPOI.DLL开源组件,可以不安装Office软件,进行读写Excel文件。</span></span></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px; color:rgb(255,102,0)"><span style="margin:0px; padding:0px; color:rgb(0,0,0)"> NPIO.dll <a target="_blank" title="NPOI" href="http://files.cnblogs.com/files/ichk/NPOI.rar" style="margin:0px; padding:0px; color:black">http://files.cnblogs.com/files/ichk/NPOI.rar</a></span></span></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px">调用方法如下:</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px">导出代码:</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"></span></p> <div class="dp-highlighter bg_csharp"><div class="bar"><div class="tools"><b>[csharp]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 446px; top: 1165px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=18&height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span class="comment">/// <summary></span><span> </span></span></li><li class=""><span> <span class="comment">/// DataTable导出到Excel的MemoryStream Export()</span><span> </span></span></li><li class="alt"><span> <span class="comment">/// </summary></span><span> </span></span></li><li class=""><span> <span class="comment">/// <param name="dtSource">DataTable数据源</param></span><span> </span></span></li><li class="alt"><span> <span class="comment">/// <param name="strHeaderText">Excel表头文本(例如:车辆列表)</param></span><span> </span></span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> MemoryStream Export(DataTable dtSource, </span><span class="keyword">string</span><span> strHeaderText) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> HSSFWorkbook workbook = <span class="keyword">new</span><span> HSSFWorkbook(); </span></span></li><li class="alt"><span> ISheet sheet = workbook.CreateSheet(); </span></li><li class=""><span><span class="preprocessor"> </span> </span></li><li class="alt"><span><span class="preprocessor"> #region 右击文件 属性信息</span><span> </span></span></li><li class=""><span> { </span></li><li class="alt"><span> DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation(); </span></li><li class=""><span> dsi.Company = <span class="string">"NPOI"</span><span>; </span></span></li><li class="alt"><span> workbook.DocumentSummaryInformation = dsi; </span></li><li class=""><span> </span></li><li class="alt"><span> SummaryInformation si = PropertySetFactory.CreateSummaryInformation(); </span></li><li class=""><span> si.Author = <span class="string">"文件作者信息"</span><span>; </span><span class="comment">//填加xls文件作者信息</span><span> </span></span></li><li class="alt"><span> si.ApplicationName = <span class="string">"创建程序信息"</span><span>; </span><span class="comment">//填加xls文件创建程序信息</span><span> </span></span></li><li class=""><span> si.LastAuthor = <span class="string">"最后保存者信息"</span><span>; </span><span class="comment">//填加xls文件最后保存者信息</span><span> </span></span></li><li class="alt"><span> si.Comments = <span class="string">"作者信息"</span><span>; </span><span class="comment">//填加xls文件作者信息</span><span> </span></span></li><li class=""><span> si.Title = <span class="string">"标题信息"</span><span>; </span><span class="comment">//填加xls文件标题信息</span><span> </span></span></li><li class="alt"><span> si.Subject = <span class="string">"主题信息"</span><span>;</span><span class="comment">//填加文件主题信息</span><span> </span></span></li><li class=""><span> si.CreateDateTime = System.DateTime.Now; </span></li><li class="alt"><span> workbook.SummaryInformation = si; </span></li><li class=""><span> } </span></li><li class="alt"><span><span class="preprocessor"> #endregion</span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span> ICellStyle dateStyle = workbook.CreateCellStyle(); </span></li><li class=""><span> IDataFormat format = workbook.CreateDataFormat(); </span></li><li class="alt"><span> dateStyle.DataFormat = format.GetFormat(<span class="string">"yyyy-mm-dd"</span><span>); </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="comment">//取得列宽</span><span> </span></span></li><li class=""><span> <span class="keyword">int</span><span>[] arrColWidth = </span><span class="keyword">new</span><span> </span><span class="keyword">int</span><span>[dtSource.Columns.Count]; </span></span></li><li class="alt"><span> <span class="keyword">foreach</span><span> (DataColumn item </span><span class="keyword">in</span><span> dtSource.Columns) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length; </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = 0; i < dtSource.Rows.Count; i++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> j = 0; j < dtSource.Columns.Count; j++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">int</span><span> intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length; </span></span></li><li class=""><span> <span class="keyword">if</span><span> (intTemp > arrColWidth[j]) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> arrColWidth[j] = intTemp; </span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="keyword">int</span><span> rowIndex = 0; </span></span></li><li class="alt"><span> <span class="keyword">foreach</span><span> (DataRow row </span><span class="keyword">in</span><span> dtSource.Rows) </span></span></li><li class=""><span> { </span></li><li class="alt"><span><span class="preprocessor"> #region 新建表,填充表头,填充列头,样式</span><span> </span></span></li><li class=""><span> <span class="keyword">if</span><span> (rowIndex == 65535 || rowIndex == 0) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">if</span><span> (rowIndex != 0) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> sheet = workbook.CreateSheet(); </span></li><li class="alt"><span> } </span></li><li class=""><span><span class="preprocessor"></span> </span></li><li class="alt"><span><span class="preprocessor"> #region 表头及样式</span><span> </span></span></li><li class=""><span> { </span></li><li class="alt"><span> IRow headerRow = sheet.CreateRow(0); </span></li><li class=""><span> headerRow.HeightInPoints = 25; </span></li><li class="alt"><span> headerRow.CreateCell(0).SetCellValue(strHeaderText); </span></li><li class=""><span> </span></li><li class="alt"><span> ICellStyle headStyle = workbook.CreateCellStyle(); </span></li>< 18dec ;li class=""><span> headStyle.Alignment = HorizontalAlignment.CENTER; </span></li><li class="alt"><span> IFont font = workbook.CreateFont(); </span></li><li class=""><span> font.FontHeightInPoints = 20; </span></li><li class="alt"><span> font.Boldweight = 700; </span></li><li class=""><span> headStyle.SetFont(font); </span></li><li class="alt"><span> headerRow.GetCell(0).CellStyle = headStyle; </span></li><li class=""><span> sheet.AddMergedRegion(<span class="keyword">new</span><span> NPOI.SS.Util.CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1)); </span></span></li><li class="alt"><span> } </span></li><li class=""><span><span class="preprocessor"> #endregion</span><span> </span></span></li><li class="alt"><span><span class="preprocessor"></span> </span></li><li class=""><span><span class="preprocessor"> #region 列头及样式</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> IRow headerRow = sheet.CreateRow(1); </span></li><li class="alt"><span> ICellStyle headStyle = workbook.CreateCellStyle(); </span></li><li class=""><span> headStyle.Alignment = HorizontalAlignment.CENTER; </span></li><li class="alt"><span> IFont font = workbook.CreateFont(); </span></li><li class=""><span> font.FontHeightInPoints = 10; </span></li><li class="alt"><span> font.Boldweight = 700; </span></li><li class=""><span> headStyle.SetFont(font); </span></li><li class="alt"><span> <span class="keyword">foreach</span><span> (DataColumn column </span><span class="keyword">in</span><span> dtSource.Columns) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); </span></li><li class=""><span> headerRow.GetCell(column.Ordinal).CellStyle = headStyle; </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="comment">//设置列宽</span><span> </span></span></li><li class="alt"><span> sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256); </span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span><span class="preprocessor"> #endregion</span><span> </span></span></li><li class="alt"><span> </span></li><li class=""><span> rowIndex = 2; </span></li><li class="alt"><span> } </span></li><li class=""><span><span class="preprocessor"> #endregion</span><span> </span></span></li><li class="alt"><span><span class="preprocessor"></span> </span></li><li class=""><span><span class="preprocessor"> #region 填充内容</span><span> </span></span></li><li class="alt"><span> IRow dataRow = sheet.CreateRow(rowIndex); </span></li><li class=""><span> <span class="keyword">foreach</span><span> (DataColumn column </span><span class="keyword">in</span><span> dtSource.Columns) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> ICell newCell = dataRow.CreateCell(column.Ordinal); </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">string</span><span> drValue = row[column].ToString(); </span></span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">switch</span><span> (column.DataType.ToString()) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">case</span><span> </span><span class="string">"System.String"</span><span>:</span><span class="comment">//字符串类型</span><span> </span></span></li><li class="alt"><span> newCell.SetCellValue(drValue); </span></li><li class=""><span> <span class="keyword">break</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">case</span><span> </span><span class="string">"System.DateTime"</span><span>:</span><span class="comment">//日期类型</span><span> </span></span></li><li class=""><span> System.DateTime dateV; </span></li><li class="alt"><span> System.DateTime.TryParse(drValue, <span class="keyword">out</span><span> dateV); </span></span></li><li class=""><span> newCell.SetCellValue(dateV); </span></li><li class="alt"><span> </span></li><li class=""><span> newCell.CellStyle = dateStyle;<span class="comment">//格式化显示</span><span> </span></span></li><li class="alt"><span> <span class="keyword">break</span><span>; </span></span></li><li class=""><span> <span class="keyword">case</span><span> </span><span class="string">"System.Boolean"</span><span>:</span><span class="comment">//布尔型</span><span> </span></span></li><li class="alt"><span> <span class="keyword">bool</span><span> boolV = </span><span class="keyword">false</span><span>; </span></span></li><li class=""><span> <span class="keyword">bool</span><span>.TryParse(drValue, </span><span class="keyword">out</span><span> boolV); </span></span></li><li class="alt"><span> newCell.SetCellValue(boolV); </span></li><li class=""><span> <span class="keyword">break</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">case</span><span> </span><span class="string">"System.Int16"</span><span>:</span><span class="comment">//整型</span><span> </span></span></li><li class=""><span> <span class="keyword">case</span><span> </span><span class="string">"System.Int32"</span><span>: </span></span></li><li class="alt"><span> <span class="keyword">case</span><span> </span><span class="string">"System.Int64"</span><span>: </span></span></li><li class=""><span> <span class="keyword">case</span><span> </span><span class="string">"System.Byte"</span><span>: </span></span></li><li class="alt"><span> <span class="keyword">int</span><span> intV = 0; </span></span></li><li class=""><span> <span class="keyword">int</span><span>.TryParse(drValue, </span><span class="keyword">out</span><span> intV); </span></span></li><li class="alt"><span> newCell.SetCellValue(intV); </span></li><li class=""><span> <span class="keyword">break</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">case</span><span> </span><span class="string">"System.Decimal"</span><span>:</span><span class="comment">//浮点型</span><span> </span></span></li><li class=""><span> <span class="keyword">case</span><span> </span><span class="string">"System.Double"</span><span>: </span></span></li><li class="alt"><span> <span class="keyword">double</span><span> doubV = 0; </span></span></li><li class=""><span> <span class="keyword">double</span><span>.TryParse(drValue, </span><span class="keyword">out</span><span> doubV); </span></span></li><li class="alt"><span> newCell.SetCellValue(doubV); </span></li><li class=""><span> <span class="keyword">break</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">case</span><span> </span><span class="string">"System.DBNull"</span><span>:</span><span class="comment">//空值处理</span><span> </span></span></li><li class=""><span> newCell.SetCellValue(<span class="string">""</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">break</span><span>; </span></span></li><li class=""><span> <span class="keyword">default</span><span>: </span></span></li><li class="alt"><span> newCell.SetCellValue(<span class="string">""</span><span>); </span></span></li><li class=""><span> <span class="keyword">break</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span><span class="preprocessor"> #endregion</span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span> rowIndex++; </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">using</span><span> (MemoryStream ms = </span><span class="keyword">new</span><span> MemoryStream()) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> workbook.Write(ms); </span></li><li class=""><span> ms.Flush(); </span></li><li class="alt"><span> ms.Position = 0; </span></li><li class=""><span> sheet.Dispose(); </span></li><li class="alt"><span> <span class="keyword">return</span><span> ms; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li></ol><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="csharp" style="display: none;">/// <summary> /// DataTable导出到Excel的MemoryStream Export() /// </summary> /// <param name="dtSource">DataTable数据源</param> /// <param name="strHeaderText">Excel表头文本(例如:车辆列表)</param> public static MemoryStream Export(DataTable dtSource, string strHeaderText) { HSSFWorkbook workbook = new HSSFWorkbook(); ISheet sheet = workbook.CreateSheet(); #region 右击文件 属性信息 { DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation(); dsi.Company = "NPOI"; workbook.DocumentSummaryInformation = dsi; SummaryInformation si = PropertySetFactory.CreateSummaryInformation(); si.Author = "文件作者信息"; //填加xls文件作者信息 si.ApplicationName = "创建程序信息"; //填加xls文件创建程序信息 si.LastAuthor = "最后保存者信息"; //填加xls文件最后保存者信息 si.Comments = "作者信息"; //填加xls文件作者信息 si.Title = "标题信息"; //填加xls文件标题信息 si.Subject = "主题信息";//填加文件主题信息 si.CreateDateTime = System.DateTime.Now; workbook.SummaryInformation = si; } #endregion ICellStyle dateStyle = workbook.CreateCellStyle(); IDataFormat format = workbook.CreateDataFormat(); dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd"); //取得列宽 int[] arrColWidth = new int[dtSource.Columns.Count]; foreach (DataColumn item in dtSource.Columns) { arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length; } for (int i = 0; i < dtSource.Rows.Count; i++) { for (int j = 0; j < dtSource.Columns.Count; j++) { int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length; if (intTemp > arrColWidth[j]) { arrColWidth[j] = intTemp; } } } int rowIndex = 0; foreach (DataRow row in dtSource.Rows) { #region 新建表,填充表头,填充列头,样式 if (rowIndex == 65535 || rowIndex == 0) { if (rowIndex != 0) { sheet = workbook.CreateSheet(); } #region 表头及样式 { IRow headerRow = sheet.CreateRow(0); headerRow.HeightInPoints = 25; headerRow.CreateCell(0).SetCellValue(strHeaderText); ICellStyle headStyle = workbook.CreateCellStyle(); headStyle.Alignment = HorizontalAlignment.CENTER; IFont font = workbook.CreateFont(); font.FontHeightInPoints = 20; font.Boldweight = 700; headStyle.SetFont(font); headerRow.GetCell(0).CellStyle = headStyle; sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1)); } #endregion #region 列头及样式 { IRow headerRow = sheet.CreateRow(1); ICellStyle headStyle = workbook.CreateCellStyle(); headStyle.Alignment = HorizontalAlignment.CENTER; IFont font = workbook.CreateFont(); font.FontHeightInPoints = 10; font.Boldweight = 700; headStyle.SetFont(font); foreach (DataColumn column in dtSource.Columns) { headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); headerRow.GetCell(column.Ordinal).CellStyle = headStyle; //设置列宽 sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256); } } #endregion rowIndex = 2; } #endregion #region 填充内容 IRow dataRow = sheet.CreateRow(rowIndex); foreach (DataColumn column in dtSource.Columns) { ICell newCell = dataRow.CreateCell(column.Ordinal); string drValue = row[column].ToString(); switch (column.DataType.ToString()) { case "System.String"://字符串类型 newCell.SetCellValue(drValue); break; case "System.DateTime"://日期类型 System.DateTime dateV; System.DateTime.TryParse(drValue, out dateV); newCell.SetCellValue(dateV); newCell.CellStyle = dateStyle;//格式化显示 break; case "System.Boolean"://布尔型 bool boolV = false; bool.TryParse(drValue, out boolV); newCell.SetCellValue(boolV); break; case "System.Int16"://整型 case "System.Int32": case "System.Int64": case "System.Byte": int intV = 0; int.TryParse(drValue, out intV); newCell.SetCellValue(intV); break; case "System.Decimal"://浮点型 case "System.Double": double doubV = 0; double.TryParse(drValue, out doubV); newCell.SetCellValue(doubV); break; case "System.DBNull"://空值处理 newCell.SetCellValue(""); break; default: newCell.SetCellValue(""); break; } } #endregion rowIndex++; } using (MemoryStream ms = new MemoryStream()) { workbook.Write(ms); ms.Flush(); ms.Position = 0; sheet.Dispose(); return ms; } }</pre> <p></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)">导入代码:</span><br> </p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"></span></p> <div class="dp-highlighter bg_csharp"><div class="bar"><div class="tools"><b>[csharp]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 446px; top: 4153px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=18&height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span class="comment">/// <summary></span><span> </span></span></li><li class=""><span> <span class="comment">/// 读取excel ,默认第一行为标头</span><span> </span></span></li><li class="alt"><span> <span class="comment">/// </summary></span><span> </span></span></li><li class=""><span> <span class="comment">/// <param name="strFileName">excel文档路径</param></span><span> </span></span></li><li class="alt"><span> <span class="comment">/// <returns></returns></span><span> </span></span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> DataTable Import(</span><span class="keyword">string</span><span> strFileName) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> DataTable dt = <span class="keyword">new</span><span> DataTable(); </span></span></li><li class="alt"><span> </span></li><li class=""><span> HSSFWorkbook hssfworkbook; </span></li><li class="alt"><span> <span class="keyword">using</span><span> (FileStream file = </span><span class="keyword">new</span><span> FileStream(strFileName, FileMode.Open, FileAccess.Read)) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> hssfworkbook = <span class="keyword">new</span><span> HSSFWorkbook(file); </span></span></li><li class=""><span> } </span></li><li class="alt"><span> ISheet sheet = hssfworkbook.GetSheetAt(0); </span></li><li class=""><span> System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); </span></li><li class="alt"><span> </span></li><li class=""><span> IRow headerRow = sheet.GetRow(0); </span></li><li class="alt"><span> <span class="keyword">int</span><span> cellCount = headerRow.LastCellNum; </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> j = 0; j < cellCount; j++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> ICell cell = headerRow.GetCell(j); </span></li><li class=""><span> dt.Columns.Add(cell.ToString()); </span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> IRow row = sheet.GetRow(i); </span></li><li class=""><span> DataRow dataRow = dt.NewRow(); </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> j = row.FirstCellNum; j < cellCount; j++) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">if</span><span> (row.GetCell(j) != </span><span class="keyword">null</span><span>) </span></span></li><li class="alt"><span> dataRow[j] = row.GetCell(j).ToString(); </span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> dt.Rows.Add(dataRow); </span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="keyword">return</span><span> dt; </span></span></li><li class="alt"><span> } </span></li></ol><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="csharp" style="display: none;">/// <summary> /// 读取excel ,默认第一行为标头 /// </summary> /// <param name="strFileName">excel文档路径</param> /// <returns></returns> public static DataTable Import(string strFileName) { DataTable dt = new DataTable(); HSSFWorkbook hssfworkbook; using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read)) { hssfworkbook = new HSSFWorkbook(file); } ISheet sheet = hssfworkbook.GetSheetAt(0); System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); IRow headerRow = sheet.GetRow(0); int cellCount = headerRow.LastCellNum; for (int j = 0; j < cellCount; j++) { ICell cell = headerRow.GetCell(j); dt.Columns.Add(cell.ToString()); } for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); DataRow dataRow = dt.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) dataRow[j] = row.GetCell(j).ToString(); } dt.Rows.Add(dataRow); } return dt; }</pre> <p></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"><br> </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> 2.使用C#发射方式调用Excel进行,不需要引用Excel.dll组件。此种方法不建议,太麻烦,也需要安装Office。</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px; background-color:rgb(238,238,238)"> <span style="margin:0px; padding:0px"> 调用方法如下:</span></p> <div class="dp-highlighter bg_csharp"><div class="bar"><div class="tools"><b>[csharp]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 446px; top: 5043px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=18&height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span class="keyword">private</span><span> </span><span class="keyword">void</span><span> Export2Excel(DataGridView datagridview, </span><span class="keyword">bool</span><span> captions) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">object</span><span> objApp_Late; </span></span></li><li class=""><span> <span class="keyword">object</span><span> objBook_Late; </span></span></li><li class="alt"><span> <span class="keyword">object</span><span> objBooks_Late; </span></span></li><li class=""><span> <span class="keyword">object</span><span> objSheets_Late; </span></span></li><li class="alt"><span> <span class="keyword">object</span><span> objSheet_Late; </span></span></li><li class=""><span> <span class="keyword">object</span><span> objRange_Late; </span></span></li><li class="alt"><span> <span class="keyword">object</span><span>[] Parameters; </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">string</span><span>[] headers = </span><span class="keyword">new</span><span> </span><span class="keyword">string</span><span>[datagridview.DisplayedColumnCount(</span><span class="keyword">true</span><span>)]; </span></span></li><li class=""><span> <span class="keyword">string</span><span>[] columns = </span><span class="keyword">new</span><span> </span><span class="keyword">string</span><span>[datagridview.DisplayedColumnCount(</span><span class="keyword">true</span><span>)]; </span></span></li><li class="alt"><span> <span class="keyword">string</span><span>[] colName = </span><span class="keyword">new</span><span> </span><span class="keyword">string</span><span>[datagridview.DisplayedColumnCount(</span><span class="keyword">true</span><span>)]; </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">int</span><span> i = 0; </span></span></li><li class=""><span> <span class="keyword">int</span><span> c = 0; </span></span></li><li class="alt"><span> <span class="keyword">int</span><span> m = 0; </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">for</span><span> (c = 0; c < datagridview.Columns.Count; c++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> j = 0; j < datagridview.Columns.Count; j++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> DataGridViewColumn tmpcol = datagridview.Columns[j]; </span></li><li class=""><span> <span class="keyword">if</span><span> (tmpcol.DisplayIndex == c) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">if</span><span> (tmpcol.Visible) </span><span class="comment">//不显示的隐藏列初始化为tag=0</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> headers[c - m] = tmpcol.HeaderText; </span></li><li class="alt"><span> i = c - m + 65; </span></li><li class=""><span> columns[c - m] = Convert.ToString((<span class="keyword">char</span><span>)i); </span></span></li><li class="alt"><span> colName[c - m] = tmpcol.Name; </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">else</span><span> </span></span></li><li class=""><span> { </span></li><li class="alt"><span> m++; </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">break</span><span>; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">try</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="comment">// Get the class type and instantiate Excel.</span><span> </span></span></li><li class="alt"><span> Type objClassType; </span></li><li class=""><span> objClassType = Type.GetTypeFromProgID(<span class="string">"Excel.Application"</span><span>); </span></span></li><li class="alt"><span> objApp_Late = Activator.CreateInstance(objClassType); </span></li><li class=""><span> <span class="comment">//Get the workbooks collection.</span><span> </span></span></li><li class="alt"><span> objBooks_Late = objApp_Late.GetType().InvokeMember(<span class="string">"Workbooks"</span><span>, BindingFlags.GetProperty, </span><span class="keyword">null</span><span>, objApp_Late, </span><span class="keyword">null</span><span>); </span></span></li><li class=""><span> <span class="comment">//Add a new workbook.</span><span> </span></span></li><li class="alt"><span> objBook_Late = objBooks_Late.GetType().InvokeMember(<span class="string">"Add"</span><span>, BindingFlags.InvokeMethod, </span><span class="keyword">null</span><span>, objBooks_Late, </span><span class="keyword">null</span><span>); </span></span></li><li class=""><span> <span class="comment">//Get the worksheets collection.</span><span> </span></span></li><li class="alt"><span> objSheets_Late = objBook_Late.GetType().InvokeMember(<span class="string">"Worksheets"</span><span>, BindingFlags.GetProperty, </span><span class="keyword">null</span><span>, objBook_Late, </span><span class="keyword">null</span><span>); </span></span></li><li class=""><span> <span class="comment">//Get the first worksheet.</span><span> </span></span></li><li class="alt"><span> Parameters = <span class="keyword">new</span><span> Object[1]; </span></span></li><li class=""><span> Parameters[0] = 1; </span></li><li class="alt"><span> objSheet_Late = objSheets_Late.GetType().InvokeMember(<span class="string">"Item"</span><span>, BindingFlags.GetProperty, </span><span class="keyword">null</span><span>, objSheets_Late, Parameters); </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">if</span><span> (captions) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="comment">// Create the headers in the first row of the sheet</span><span> </span></span></li><li class=""><span> <span class="keyword">for</span><span> (c = 0; c < datagridview.DisplayedColumnCount(</span><span class="keyword">true</span><span>); c++) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="comment">//Get a range object that contains cell.</span><span> </span></span></li><li class="alt"><span> Parameters = <span class="keyword">new</span><span> Object[2]; </span></span></li><li class=""><span> Parameters[0] = columns[c] + <span class="string">"1"</span><span>; </span></span></li><li class="alt"><span> Parameters[1] = Missing.Value; </span></li><li class=""><span> objRange_Late = objSheet_Late.GetType().InvokeMember(<span class="string">"Range"</span><span>, BindingFlags.GetProperty, </span><span class="keyword">null</span><span>, objSheet_Late, Parameters); </span></span></li><li class="alt"><span> <span class="comment">//Write Headers in cell.</span><span> </span></span></li><li class=""><span> Parameters = <span class="keyword">new</span><span> Object[1]; </span></span></li><li class="alt"><span> Parameters[0] = headers[c]; </span></li><li class=""><span> objRange_Late.GetType().InvokeMember(<span class="string">"Value"</span><span>, BindingFlags.SetProperty, </span><span class="keyword">null</span><span>, objRange_Late, Parameters); </span></span></li><li class="alt"><span> } </span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="comment">// Now add the data from the grid to the sheet starting in row 2</span><span> </span></span></li><li class="alt"><span> <span class="keyword">for</span><span> (i = 0; i < datagridview.RowCount; i++) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> c = 0; </span></li><li class=""><span> <span class="keyword">foreach</span><span> (</span><span class="keyword">string</span><span> txtCol </span><span class="keyword">in</span><span> colName) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> DataGridViewColumn col = datagridview.Columns[txtCol]; </span></li><li class="alt"><span> <span class="keyword">if</span><span> (col.Visible) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> <span class="comment">//Get a range object that contains cell.</span><span> </span></span></li><li class=""><span> Parameters = <span class="keyword">new</span><span> Object[2]; </span></span></li><li class="alt"><span> Parameters[0] = columns[c] + Convert.ToString(i + 2); </span></li><li class=""><span> Parameters[1] = Missing.Value; </span></li><li class="alt"><span> objRange_Late = objSheet_Late.GetType().InvokeMember(<span class="string">"Range"</span><span>, BindingFlags.GetProperty, </span><span class="keyword">null</span><span>, objSheet_Late, Parameters); </span></span></li><li class=""><span> <span class="comment">//Write Headers in cell.</span><span> </span></span></li><li class="alt"><span> Parameters = <span class="keyword">new</span><span> Object[1]; </span></span></li><li class=""><span> <span class="comment">//Parameters[0] = datagridview.Rows[i].Cells[headers[c]].Value.ToString();</span><span> </span></span></li><li class="alt"><span> Parameters[0] = datagridview.Rows[i].Cells[col.Name].Value.ToString(); </span></li><li class=""><span> objRange_Late.GetType().InvokeMember(<span class="string">"Value"</span><span>, BindingFlags.SetProperty, </span><span class="keyword">null</span><span>, objRange_Late, Parameters); </span></span></li><li class="alt"><span> c++; </span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="comment">//Return control of Excel to the user.</span><span> </span></span></li><li class=""><span> Parameters = <span class="keyword">new</span><span> Object[1]; </span></span></li><li class="alt"><span> Parameters[0] = <span class="keyword">true</span><span>; </span></span></li><li class=""><span> objApp_Late.GetType().InvokeMember(<span class="string">"Visible"</span><span>, BindingFlags.SetProperty, </span></span></li><li class="alt"><span> <span class="keyword">null</span><span>, objApp_Late, Parameters); </span></span></li><li class=""><span> objApp_Late.GetType().InvokeMember(<span class="string">"UserControl"</span><span>, BindingFlags.SetProperty, </span></span></li><li class="alt"><span> <span class="keyword">null</span><span>, objApp_Late, Parameters); </span></span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">catch</span><span> (Exception theException) </span></span></li><li class=""><span> { </span></li><li class="alt"><span> String errorMessage; </span></li><li class=""><span> errorMessage = <span class="string">"Error: "</span><span>; </span></span></li><li class="alt"><span> errorMessage = String.Concat(errorMessage, theException.Message); </span></li><li class=""><span> errorMessage = String.Concat(errorMessage, <span class="string">" Line: "</span><span>); </span></span></li><li class="alt"><span> errorMessage = String.Concat(errorMessage, theException.Source); </span></li><li class=""><span> </span></li><li class="alt"><span> MessageBox.Show(errorMessage, <span class="string">"Error"</span><span>); </span></span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li></ol><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="csharp" style="display: none;">private void Export2Excel(DataGridView datagridview, bool captions) { object objApp_Late; object objBook_Late; object objBooks_Late; object objSheets_Late; object objSheet_Late; object objRange_Late; object[] Parameters; string[] headers = new string[datagridview.DisplayedColumnCount(true)]; string[] columns = new string[datagridview.DisplayedColumnCount(true)]; string[] colName = new string[datagridview.DisplayedColumnCount(true)]; int i = 0; int c = 0; int m = 0; for (c = 0; c < datagridview.Columns.Count; c++) { for (int j = 0; j < datagridview.Columns.Count; j++) { DataGridViewColumn tmpcol = datagridview.Columns[j]; if (tmpcol.DisplayIndex == c) { if (tmpcol.Visible) //不显示的隐藏列初始化为tag=0 { headers[c - m] = tmpcol.HeaderText; i = c - m + 65; columns[c - m] = Convert.ToString((char)i); colName[c - m] = tmpcol.Name; } else { m++; } break; } } } try { // Get the class type and instantiate Excel. Type objClassType; objClassType = Type.GetTypeFromProgID("Excel.Application"); objApp_Late = Activator.CreateInstance(objClassType); //Get the workbooks collection. objBooks_Late = objApp_Late.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp_Late, null); //Add a new workbook. objBook_Late = objBooks_Late.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, objBooks_Late, null); //Get the worksheets collection. objSheets_Late = objBook_Late.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook_Late, null); //Get the first worksheet. Parameters = new Object[1]; Parameters[0] = 1; objSheet_Late = objSheets_Late.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets_Late, Parameters); if (captions) { // Create the headers in the first row of the sheet for (c = 0; c < datagridview.DisplayedColumnCount(true); c++) { //Get a range object that contains cell. Parameters = new Object[2]; Parameters[0] = columns[c] + "1"; Parameters[1] = Missing.Value; objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, Parameters); //Write Headers in cell. Parameters = new Object[1]; Parameters[0] = headers[c]; objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters); } } // Now add the data from the grid to the sheet starting in row 2 for (i = 0; i < datagridview.RowCount; i++) { c = 0; foreach (string txtCol in colName) { DataGridViewColumn col = datagridview.Columns[txtCol]; if (col.Visible) { //Get a range object that contains cell. Parameters = new Object[2]; Parameters[0] = columns[c] + Convert.ToString(i + 2); Parameters[1] = Missing.Value; objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, Parameters); //Write Headers in cell. Parameters = new Object[1]; //Parameters[0] = datagridview.Rows[i].Cells[headers[c]].Value.ToString(); Parameters[0] = datagridview.Rows[i].Cells[col.Name].Value.ToString(); objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters); c++; } } } //Return control of Excel to the user. Parameters = new Object[1]; Parameters[0] = true; objApp_Late.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objApp_Late, Parameters); objApp_Late.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, objApp_Late, Parameters); } catch (Exception theException) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat(errorMessage, theException.Message); errorMessage = String.Concat(errorMessage, " Line: "); errorMessage = String.Concat(errorMessage, theException.Source); MessageBox.Show(errorMessage, "Error"); } }</pre><div class="dp-highlighter bg_csharp"><div class="bar"><div class="tools"><b>[csharp]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 446px; top: 7236px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_4" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&width=18&height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span>导出 </span></span></li></ol><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="csharp" style="display: none;">导出</pre> <pre></pre> <pre style="margin-top:0px; margin-bottom:0px; padding:0px; white-space:pre-wrap; word-wrap:break-word; line-height:18px; font-family:'Courier New'!important"><div class="dp-highlighter bg_csharp"><div class="bar"><div class="tools"><b>[csharp]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 446px; top: 7305px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_5" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_5" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=5&width=18&height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span>System.Type ExcelType = System.Type.GetTypeFromProgID(</span><span class="string">"Excel.Application"</span><span>); </span></span></li><li class=""><span>Microsoft.Office.Interop.Excel.Application obj = Activator.CreateInstance(ExcelType) <span class="keyword">as</span><span> Microsoft.Office.Interop.Excel.Application; </span></span></li></ol><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="csharp" style="display: none;">System.Type ExcelType = System.Type.GetTypeFromProgID("Excel.Application"); Microsoft.Office.Interop.Excel.Application obj = Activator.CreateInstance(ExcelType) as Microsoft.Office.Interop.Excel.Application; </pre><br></pre> </div> <!-- Baidu Button BEGIN --> <div class="bdsharebuttonbox tracking-ad bdshare-button-style0-16" style="float: right;" data-mod="popu_172" data-bd-bind="1478311788886"> <a href="#" class="bds_more" data-cmd="more" style="background-position:0 0 !important; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=d754dcc0.png) !important"></a> <a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间" style="background-position:0 -52px !important"></a> <a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博" style="background-position:0 -104px !important"></a> <a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博" style="background-position:0 -260px !important"></a> <a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网" style="background-position:0 -208px !important"></a> <a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信" style="background-position:0 -1612px !important"></a> </div> <script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script> <!-- Baidu Button END --> <link rel="stylesheet" href="http://static.blog.csdn.net/css/blog_detail.css"> <!--172.16.140.13--> <!-- Baidu Button BEGIN --> <script type="text/javascript" id="bdshare_js" data="type=tools&uid=1536434" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=410643"></script> <script type="text/javascript"> document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000) </script> <!-- Baidu Button END --> <div id="digg" articleid="52410693"> <dl id="btnDigg" class="digg digg_enable" onclick="btndigga();"> <dt>顶</dt> <dd>0</dd> </dl> <dl id="btnBury" class="digg digg_enable" onclick="btnburya();"> <dt>踩</dt> <dd>0</dd> </dl> </div> <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);"> </a> </div> <div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);"> </a></div> <script type="text/javascript"> function btndigga() { $(".tracking-ad[data-mod='popu_222'] a").click(); } function btnburya() { $(".tracking-ad[data-mod='popu_223'] a").click(); } </script> <ul class="article_next_prev"> <li class="prev_article"><span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian']);location.href='/baidu_27474941/article/details/52410680';">上一篇</span><a href="/baidu_27474941/article/details/52410680" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian'])">重写、覆盖、重载、多态几个概念的区别分析</a></li> <li class="next_article"><span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian']);location.href='/baidu_27474941/article/details/52484395';">下一篇</span><a href="/baidu_27474941/article/details/52484395" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian'])">IIS7下 【请求被中止: 未能创建 SSL/TLS 安全通道 】 解决方法</a></li> </ul> <div style="clear:both; height:10px;"></div> <div class="similar_article" style=""> <h4>我的同类文章</h4> <div class="similar_c" style="margin:20px 0px 0px 0px"> <div class="similar_c_t"> <label class="similar_cur"> <span style="cursor:pointer" onclick="GetCategoryArticles('6370462','baidu_27474941','foot','52410693');">C#<em>(16)</em></span> </label> </div> <div class="similar_wrap tracking-ad" data-mod="popu_141" style="max-height:195px;"> <a href="http://blog.csdn.net" style="display:none">http://blog.csdn.net</a> <ul class="similar_list fl"><li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52965412" id="foot_aritcle_52965412undefined9050345977302641" target="_blank" title="将dataGridView数据转成DataTable">将dataGridView数据转成DataTable</a><span>2016-10-29</span><label><i>阅读</i><b>26</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52586182" id="foot_aritcle_52586182undefined31468463176861405" target="_blank" title="C#WinForm文件操作">C#WinForm文件操作</a><span>2016-09-19</span><label><i>阅读</i><b>32</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52572041" id="foot_aritcle_52572041undefined8869509850628674" target="_blank" title="HTTP请求GET,POST">HTTP请求GET,POST</a><span>2016-09-18</span><label><i>阅读</i><b>28</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52571797" id="foot_aritcle_52571797undefined7368079998996109" target="_blank" title="DataGridView导出到Excel的三个方法">DataGridView导出到Excel的三个方法</a><span>2016-09-18</span><label><i>阅读</i><b>22</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52410680" id="foot_aritcle_52410680undefined23911915626376867" target="_blank" title="重写、覆盖、重载、多态几个概念的区别分析">重写、覆盖、重载、多态几个概念的区别分析</a><span>2016-09-02</span><label><i>阅读</i><b>25</b></label></li> </ul> <ul class="similar_list fr"><li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52586676" id="foot_aritcle_52586676undefined7553700730204582" target="_blank" title="C#进程间通信">C#进程间通信</a><span>2016-09-19</span><label><i>阅读</i><b>27</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52585743" id="foot_aritcle_52585743undefined9243959696032107" target="_blank" title="c#开发windows服务">c#开发windows服务</a><span>2016-09-19</span><label><i>阅读</i><b>26</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52571910" id="foot_aritcle_52571910undefined9201098687481135" target="_blank" title="C#操作webservice(经典入门教程及实例)">C#操作webservice(经典入门教程及实例)</a><span>2016-09-18</span><label><i>阅读</i><b>52</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52484999" id="foot_aritcle_52484999undefined777820919174701" target="_blank" title="获取系统盘符">获取系统盘符</a><span>2016-09-09</span><label><i>阅读</i><b>20</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/baidu_27474941/article/details/52298659" id="foot_aritcle_52298659undefined2812007279135287" target="_blank" title="vs2010winform程序中实现登录数量的控制">vs2010winform程序中实现登录数量的控制</a><span>2016-08-24</span><label><i>阅读</i><b>26</b></label></li> </ul> <a href="http://blog.csdn.net/baidu_27474941/article/category/6370462" class="MoreArticle">更多文章</a></div> </div> </div> <script type="text/javascript"> $(function () { GetCategoryArticles('6370462', 'baidu_27474941','foot','52410693'); }); </script> </div>
相关文章推荐
- 让C# Excel导入导出,支持不同版本的Office
- 让C# Excel导入导出,支持不同版本的Office
- 让C# Excel导入导出,支持不同版本的Office
- 让C# Excel导入导出 支持不同版本Office
- 让C# Excel导入导出,支持不同版本的Office
- C# DataGridView 导出 Excel(根据Excel版本显示选择不同后缀格式xls或xlsx)
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)
- java利用POI实现Excel导入导出详解-支持97-2013版本以及2017版本
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS
- C# NPOI2.1.3 版本数据导入导出到excel
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)
- C#开发EXCEL导入、导出支持MSSQL、ORACLE、ACCESS
- c# office不同版本下中使用Excel
- [C#] 将DataSet内容导入到Excel (矩阵区域导出)
- C#操作Excel(导入导出)
- C#操作Excel(导入导出)[转贴]
- C#操作Excel(导入导出)