呼叫妖哥及各路大神!!!!

黄破尼 2017-07-28 05:49:45
C++ builder想利用ole操作将excel的内容导入数据库
已经可以实现一个单元格一个单元格取值然后写入数据库
可是如果大数据的话这样效率很低
所以就想利用range操作将区域内的值读取入二维数组
可是不知道怎样代码实现
range需要一个variant的二维数组去取值
可是菜鸟对variant型二维数组一脸懵逼
忘各位老师解答
求妖哥赐教
乱七八糟 大概按照意思打了几行代码 忘各位指点迷津

Variant excelApp = CreateOleObject("Excel.Application");
String xlsFile = L"E:\\ha.xlsx";
excelApp.OlePropertyGet("Workbooks").OleFunction("open", WideString(xlsFile));

excelApp.OlePropertySet("Visible", True);

Variant workbook = excelApp.OlePropertyGet("ActiveWorkBook");
Variant sheet = workbook.OlePropertyGet("ActiveSheet");

String rangeText = L"A1:E17";
Variant range = sheet.OlePropertyGet("Range", WideString(rangeText));

//range.PG("Rows",1).PG("Value", 1234);

int col = range.OlePropertyGet("Columns").OlePropertyGet("Count");//获取所选range的列数
int row = range.OlePropertyGet("Rows").OlePropertyGet("Count"); //获得所选range的行数


SAFEARRAYBOUND sab[2]; //定义一个二维数组
sab[0].cElements = col;
sab[0].lLbound = 0;
sab[1].cElements = row;
sab[1].lLbound = 0;

SAFEARRAY* psa = SafeArrayCreate( VT_UI1, sizeof(sab)/sizeof(SAFEARRAYBOUND), sab);

Variant varChunk;
varChunk.vt = VT_ARRAY|VT_UI1; //数组类型
varChunk.parray = psa;

varChunk=range.PG("Value");

psa=varChunk.parray;
BYTE *buf;
SafeArrayAccessData(psa, (void **)&buf);//安全指针

SafeArrayUnaccessData(psa);

workbook.PR("Close");
excelApp.FN("Quit");
varinat型二维数组怎么定义 怎么把range的值赋给该数组 赋完该如何取值??
...全文
1339 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gbt8163 2018-06-08
  • 打赏
  • 举报
回复
妖哥是绝对的大神
天为峰 2018-05-12
  • 打赏
  • 举报
回复
最好用ADO的方式,一次把表读出来,然后写入excel,我有个资源文件就是做这个事情的,可以参考下! https://download.csdn.net/download/laizx/3915380
过客猫2022 2018-03-24
  • 打赏
  • 举报
回复
这个BBS,一个贴子,可以放N久
Hank 2018-02-07
  • 打赏
  • 举报
回复
OLE读取速度很慢很慢的,当EXCEL超过6000行的时候,基本上就挂了。 提高速度3种方法: 1、OLE打开EXCEL,然后调用COPY复制数据至内存,之后另存为TXT文件,然后ADO连接这个TXT文件,直接数据库模式操作,相当于数据库操作了 2、OLE打开EXCEL,插入表,OLE保存,然后ADO连接修改后EXCEL文件,也是数据库直接操作,这种方法对EXCEL文件格式要求很高,必须规范 3、文件流打开EXCEL文件,直接读取EXCEL文件流,识别XLS各种标识符,就是写个简单的EXCEL,仅有打开功能,这个速度最快,当然,难度也最高,需要你分析EXCEL的文件格式,这个MS有官方文档。
ccrun.com 2018-02-07
  • 打赏
  • 举报
回复
楼上真牛,半年前的帖子也能翻出来。我回复过网友类似的问题,楼主可以自行搜索一下。
过客猫2022 2017-08-19
  • 打赏
  • 举报
回复
用python写以, 用这个xlrd,速度很快。

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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