您的位置:首页 > 编程语言 > C#

让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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: