如何在使用OLE控制excel表格时,可以同时进行读写其他excel表格

me2145 2012-03-09 09:04:19
我现在想要在使用ole控件控制excel表格的同时,对其他的excel表格进行操作。要使这两者互不影响,怎样才能达到这样的目的呢?急求各位大侠帮忙。小弟不胜感谢~~
...全文
152 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
me2145 2012-03-10
  • 打赏
  • 举报
回复
不好意思,是我没有说清楚。我想要在程序运行时ole对excel进行控制,同时通过office来对其他excel进行读写,使这两者互不影响。怎样才能实现这个目的呢?
herokay 2012-03-10
  • 打赏
  • 举报
回复
ole只能同时控制一个excel文件,也就是只能有一个处于active状态,要操作另一个必须让另一个处于活动活动状态。
me2145 2012-03-10
  • 打赏
  • 举报
回复
是其他的excel表格,不是sheet。
me2145 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ccrun 的回复:]
引用 8 楼 me2145 的回复:
也就是说只能用创建多个excel对象来避免这种同时读写的情况了?

那你理想中是什么情况呢?就算直接在两个Excel中打开同一个文档,也会提示文档已被打开的。
[/Quote]
同时操作的是不同的excel文档,所以不会有这样的情况。我现在想可不可以通过一个互斥锁来避免这种情况呢?
ccrun.com 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 me2145 的回复:]
也就是说只能用创建多个excel对象来避免这种同时读写的情况了?[/Quote]

那你理想中是什么情况呢?就算直接在两个Excel中打开同一个文档,也会提示文档已被打开的。
me2145 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ccrun 的回复:]
引用 6 楼 me2145 的回复:
回复妖哥:不是在我自己编写的程序中打开excel,是要在我自己编写的程序运行同时,通过excel.exe来对excel进行读写。


我知道你的意思啊,我说的就是通过OLE创建多个Excel对象,然后对不同的文档进行读写。并不是你理解的简单的运行多个Excel.exe,因为那样不可控。
[/Quote]
也就是说只能用创建多个excel对象来避免这种同时读写的情况了?
ccrun.com 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 me2145 的回复:]
回复妖哥:不是在我自己编写的程序中打开excel,是要在我自己编写的程序运行同时,通过excel.exe来对excel进行读写。
[/Quote]

我知道你的意思啊,我说的就是通过OLE创建多个Excel对象,然后对不同的文档进行读写。并不是你理解的简单的运行多个Excel.exe,因为那样不可控。
me2145 2012-03-10
  • 打赏
  • 举报
回复
回复妖哥:不是在我自己编写的程序中打开excel,是要在我自己编写的程序运行同时,通过excel.exe来对excel进行读写。
ccrun.com 2012-03-10
  • 打赏
  • 举报
回复
你创建多个不同的Excel对象,每个对象打开不同的文档读写就行了。
ccrun.com 2012-03-09
  • 打赏
  • 举报
回复
首先OLE不是什么控件。其次你说的这个对其他Excel表格进行操作,是其他的Excel文件还是Sheet?
不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和间型单元吗?在Excel中没有这样的单元。Excel是和Delphi一样的方式来存储日期和间的,即浮点型。那是什么制造了日期或间值啦,是格式化。 完全支持公式。你可以使用Excel一样的函数,也支持对外部工作簿引用的公式,你甚至可以从外部引用读取结果。 与操作Delphi的TStringGrid一样的方式操作单元格,或则通过给单元格命名,比如:”D7” 根据单元格的规则以字符串格式读取单元值 根据你的需求格式化单元 格式化很简单。通过获取单元格,你就可以操作单元的格式属性。例如:XLSReadWriteII.Sheet[n].Cell[Col,Row].FontSize := 12; 你也可以对域进行格式化,比如设置边框。 支持所有的Excel格式选项 合并单元格 操作所有的打印选项 选择页面大小,设置边距 设置标题和页脚,包括格式码。 定义打印区域 设置分页符 XLSReadWriteII完全支持Unicode 所有的字符型都是宽字符型。你完全不必担心非英语字符。 控件 你可以插入控件以及定义他们的源和目的单元 绘图 插入所有种类的绘图,从简单的线条到AutoShapes 多行文本和文本框 创建和编辑文本框以及多行文本 图表 创建和Excel中一样选项的图表 复制/移动/删除 可以以Excel一样的行为复制、移动和删除单元 行列也可以像单元一样复制和移动 支持工作簿之间的复制和移动 可以复制整个工作簿 使用命名的域/单元 你可以在你想要的任何地方命名 通过命名访问单元格,例如:XLS.NameAsFloat['MyCell'] := 202.5; 支持指定、内置的名称 支持所有超链接类型 网页和E-mail地址 本地文件 服务器文件 工作薄引用 加密文档 你可以读写加密文件。条件是你需要知道文件的密码。 计算 可计算单元以及整个工作薄 计算引擎将依据单元进行计算。 可读取引用的外部工作薄。这通过一个特殊的快速查询程序进行执行 Rich Text单元 为了轻松地创建多字体格式的单元,单元可以以RTF格式读写 VBA宏 可以读写文件中的宏,使用XLSReadWriteII可以为控件比如:按钮、组合框等添加宏 导入及导出 从下列导入数据… Open Office Calc文档 CSV文件以及其他可以自动识别分隔符、小数分隔符和文本引用字符的文本文件 HTML表格(标签) 数据库 导出数据为… CSV文件 HTML文件 其他 自动过滤 单元验证 有条件的格式 合并单元 PaintCell方法:将单元内容渲染到TCanvas对象的 XLSReadWriteII包还包含下列组件: 从任何数据库中导入数据到工作薄 工作薄导出为HTML文件
【前言】 工作或学习中可能需要实现基于VC读\写Excel文件的功能,本人最近也遇到了该问题。中间虽经波折,但是最终还是找到了解决问题的办法。 在此跟大家分享,希望对跟我同样迷茫过的同学们有所帮助。 1、程序功能 1)打开一个excel文件; 2)显示到CListCtrl上; 3)新建一个Excel文件。 以上均在对话框中实现。 2、平台 VC++2010 3、实现方法 常用的Excel打开方式有两种 1)通过数据库打开; 2)OLE方式打开。 由于方式1)操作繁琐,经常出现莫名的错误,这里选用方式2). 4、准备步骤 首先新建一个Dialog窗体程序,添加list control和两个按钮 1)将ExcelLib文件夹拷贝到程序目录下; 2)将Export2Excel.h,Export2Excel.cpp两个文件添加到项目; 3)包含头文件,#include "ExcelLib/Export2Excel.h" 通过以上步骤在程序中引入了可以读取Excle文件的CExport2Excel类; 5、打开excel文件 通过按钮点击打开 void CExcelTestDlg::OnBnClickedButtonOpenExcel() { //获取文件路径 CFileDialog* lpszOpenFile; CString szGetName; lpszOpenFile = new CFileDialog(TRUE,"","",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"Excel File(*.xlsx;*.xls)|*.xls;*.xlsx",NULL); if (lpszOpenFile->DoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //打开文件 //文件中包含多个sheet,默认打开第一个sheet CExport2Excel Excel_example; Excel_example.OpenExcel(szGetName); //获取sheet个数 int iSheetNum = Excel_example.GetSheetsNumber(); //获取已使用表格行列数 int iRows = Excel_example.GetRowCount(); int iCols = Excel_example.GetColCount(); //获取单元格的内容 CString cs_temp = Excel_example.GetText(1,1); //AfxMessageBox(cs_temp); //List control上显示 //获取工作表列名(第一行) CStringArray m_HeadName; m_HeadName.Add(_T("ID")); for (int i=1;iGetItemCount()>0) { m_list.DeleteColumn(0); } //初始化ClistCtrl,加入列名 InitList(m_list,m_HeadName); //填入内容 //第一行是标题,所以从第2行开始 CString num; int pos; for (int row = 2;row<=iRows; row++) { pos = m_list.GetItemCount(); num.Format(_T("%d"),pos +1); m_list.InsertItem(pos,num); for (int colum=1;columDoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //文件全名称 CString csFileName = szGetName; //需要添加的两个sheet的名称 CString csSheetName = "newSheet"; CString csSheetName2 = "newSheet2"; // 新建一个excel文件,自己写入文字 CExport2Excel Excel_example; //新建excel文件 Excel_example.CreateExcel(csFileName); //添加sheet,新加的sheet在前,也就是序号为1 Excel_example.CreateSheet(csSheetName); Excel_example.CreateSheet(csSheetName2); //操作最开始添加的sheet:(newSheet) Excel_example.SetSheet(2); //添加表头 Excel_example.WriteHeader(1,"第一列"); Excel_example.WriteHeader(2,"第二列"); //添加核心数据 Excel_example.WriteData(1,1,"数据1"); Excel_example.WriteData(1,2,"数据2"); //保存文件 Excel_example.Save(); //关闭文件 Excel_example.Close(); } 7、注意事项 1)一般单个Excel文件包含多个sheet,程序默认打开第一个; 2)指定操作sheet,使用Excel_example.SetSheet(2)函数; 3)打开文件最左侧的sheet序号为1,新建excel最新添加的sheet序号为1. 【后记】 本程序主要基于网络CSDN中---“Excel封装库V2.0”---完成,下载地址是:http://download.csdn.net/detail/yeah2000/3576494,在此表示感谢!同, 1)在其基础上作了小改动,改正了几个小错误,添加了几个小接口; 2)添加了如何使用的例子,原程序是没有的; 3)详细的注释 发现不足之处,还请大家多多指教!

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧