﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>学习日记 &#187; excel</title>
	<atom:link href="https://www.softwareace.cn/?feed=rss2&#038;tag=excel" rel="self" type="application/rss+xml" />
	<link>https://www.softwareace.cn</link>
	<description>时刻想着为自己的产品多做一些对他好的事情</description>
	<lastBuildDate>Fri, 20 Mar 2026 06:58:28 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>c++ 合并 多个Excel</title>
		<link>https://www.softwareace.cn/?p=74</link>
		<comments>https://www.softwareace.cn/?p=74#comments</comments>
		<pubDate>Thu, 17 Jan 2013 01:55:23 +0000</pubDate>
		<dc:creator><![CDATA[littlesu]]></dc:creator>
				<category><![CDATA[开发经验]]></category>
		<category><![CDATA[excel]]></category>

		<guid isPermaLink="false">http://192.168.0.106/?p=73</guid>
		<description><![CDATA[csdn [crayon-69f5f191559ec557014718/]]]></description>
				<content:encoded><![CDATA[<p>csdn</p><pre class="crayon-plain-tag">我写了一个用与合并两个Excel文件的函数，贴出来缓解仁兄的编码之急！

说明：将SourceFile文件中的全部工作表插入到DestFile文件中，插入位置是在DestFile文件中最后一个工作表后面。我使用的Excel 2000。

Step1：
首先别忘记引入Excel 2000 的类型库，方法：选择VC环境中Classwizard-&amp;gt;Message Maps中Add Class下拉按钮，选择From a type library，找到Excel9.OLB（一般位于Office的安装目录下,可以搜索一下）， 在出现的&amp;ldquo;Confirm Classes&amp;rdquo;对话框中选择列表框中全部内容，点击OK。

Step2：
在项目中使用到Excel Automation的地方包含excel9.h文件，即：#include &amp;quot;excel9.h&amp;quot;

Ster3：
下面是我写的合并函数，具体说明见其中注释：

void CDemoDlg::MergeExcel(CString DestFile, CString SourceFile)
{
  ::CoInitialize(NULL);
  _Application  app;	   //加载Excel服务器进程	

  if (!app.CreateDispatch(&amp;quot;Excel.Application&amp;quot;,NULL))
AfxMessageBox(&amp;quot;创建Excel服务失败!&amp;quot;);

  app.SetVisible(TRUE);

  Workbooks  wbSet;
  wbSet.AttachDispatch(app.GetWorkbooks());

  //打开目标文件
  _Workbook  wbDest;
  wbDest.AttachDispatch(wbSet.Add(_variant_t((LPCTSTR)DestFile)));
  //打开源文件
  _Workbook  wbSource;
  wbSource.AttachDispatch(wbSet.Add(_variant_t((LPCTSTR)SourceFile)));

  Worksheets  destWsSet;
  destWsSet.AttachDispatch(wbDest.GetWorksheets());
  Worksheets  sourceWsSet;
  sourceWsSet.AttachDispatch(wbSource.GetWorksheets());


  // 获取目标文件和源文件中的Worksheet数量
  long destSheetCount = destWsSet.GetCount();
  long sourceSheetCount = sourceWsSet.GetCount();

  //得到目标文件中最后一个Worksheet，源文件中的Worksheet将插入在她后面
  _Worksheet  lastWsInDest;
  lastWsInDest.AttachDispatch(
        destWsSet.GetItem(_variant_t((long)destSheetCount)));

  _Worksheet  sourceWS;
  _Worksheet  insertWS;
  Range	rgSource, rgDest;
  //遍历源文件中Worksheet集合，逐一选择、复制内容，然后
  //粘贴到目标文件最后一个Worksheet后面
  for(int i=1; i&amp;lt;=sourceSheetCount; i++)
  {	
     //复制源文件中Worksheet内容
     sourceWS.AttachDispatch(sourceWsSet.GetItem(_variant_t((long)i)));
     rgSource.AttachDispatch(sourceWS.GetCells());
     rgSource.Copy(vtMissing);

     //在目标文件最后一个Worksheet后插入一新Worksheet，同时粘贴前面复制内容
     insertWS.AttachDispatch(destWsSet.Add(vtMissing, 
                                  _variant_t(lastWsInDest),
                                           vtMissing,	        vtMissing));

     insertWS.Paste(vtMissing, vtMissing);
     insertWS.SetName(sourceWS.GetName());
     insertWS.Activate();
     rgDest.AttachDispatch(insertWS.GetRange(_variant_t(&amp;quot;A1&amp;quot;),
                                             _variant_t(&amp;quot;A1&amp;quot;)));
     rgDest.Select();
  }
  app.SetCutCopyMode(0);

  wbSource.Close(vtMissing, vtMissing, vtMissing);
}</pre><p></p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=74</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
