c++ ole自动化如何清除excel单元格内容

eimct9ow  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(145)

我正在使用IDispatch接口的以下函数调用成功地将Hello World!写入excel工作表excel中的单元格。

LPOLESTR ptName = L"Value";    //What is the key for clearing the cell contents?
  DISPID dispID;
  xlCell->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);

  LCID lcid = GetUserDefaultLCID();

  std::wstring cellVal = L"Hello World!";
  VARIANT vArgArray[1];
  vArgArray[0].vt = VT_BSTR,
  vArgArray[0].bstrVal = SysAllocString(cellVal.c_str());

  DISPID dispidNamed = DISPID_PROPERTYPUT;
  DISPPARAMS dp = {NULL, NULL, 0, 0};
  dp.cArgs = 1;
  dp.rgvarg = vArgArray;
  dp.cNamedArgs = 1;
  dp.rgdispidNamedArgs = &dispidNamed;

  xlCell->Invoke(
      dispID,
      IID_NULL,
      lcid,
      DISPATCH_PROPERTYPUT,
      &dp,
      NULL,
      NULL,
      NULL);

现在我需要使用相同的IDispatch接口(xlCell)清除单元格
我应该为LPOLESTR类型变量(GetIDsOfNames函数中的第二个参数)使用什么值来初始化dispID,以便通过调用Invoke成功清除单元格?

nhaq1z21

nhaq1z211#

虽然我找不到用于清除单元格/单元格范围的唯一DISPID,但确实起作用的是修改传递给Invoke()的VARIANT。
我所做的只是将VARIANT从这个

vArgArray[0].vt = VT_BSTR,
vArgArray[0].bstrVal = SysAllocString(cellVal.c_str());

对此

vArgArray[0].vt = VT_EMPTY;

希望能帮上忙。

相关问题