黄破尼 2017-07-28 09:41 采纳率: 50%
浏览 1641
已结题

C++ builder 10 range读取excel导入数据库

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的值赋给该数组 赋完该如何取值??

  • 写回答

1条回答 默认 最新

  • devmiao 2017-07-28 14:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能