gpt4 book ai didi

c++ - 如何使用自动化在 C++ 中迭代 Excel 列的集合?

转载 作者:行者123 更新时间:2023-11-28 04:00:58 25 4
gpt4 key购买 nike

我想做以下 VBA 代码的道德等价物:

For Each col In Worksheets("Sheet1").Columns
# do stuff
Next col

我已经为 Excel 类型库生成了 MFC 包装器,这让我走到了这一步(生成的类型全部派生自 COleDispatchDriver:

CApplication app;
app.CreateDispatch( clsid, e );

CWorkbooks wbks( app.get_Workbooks() );
CWorkbook book( wbks.Open( filename, /* optional args */ ) );
CRange cols( app.get_Columns() );
long numCols = cols.get_Count();

从那里我被困住了。看起来我可以使用 Range::get_Item(rowid, colid) 对单元格进行排序,然后从单元格中获取列,但我一直在寻找上述循环的更直接的翻译.

(编辑)澄清:我实际上并不关心单个单元格。我的目标是确定哪些列的宽度为 0(隐藏)并将它们从工作表中删除。

最佳答案

我假设您正在尝试遍历电子表格中的所有单元格。您可以获得事件工作表的“所有单元格”范围,并循环遍历其行和列:

CSheets sheets = book.get_WorkSheets();
CWorkSheet sheet = sheets.get_ActiveSheet();
Range cells = sheet.get_Cells();

int nRows = cells.get_Rows().get_Count();
int nCols = cells.get_Columns().get_Count();

for (int i = 0; i <= nRows; i++)
{
for (int j = 0; j <= nCols; j++)
{
Range cell = cells.get_Item(i+1,j+1);
//Do stuff with individual cell
}
}

编辑:响应 OP 澄清:

这可能会满足您的需求:

CSheets sheets = book.get_WorkSheets();
CWorkSheet sheet = sheets.get_ActiveSheet();
Range cols= sheet.get_Columns();
int nCols = cols.get_Count();

for (int i = nCols; i > 0; i--)
{
Range topCellOfCol = cells.get_Item(1, i);
Range entireCol = topCellOfCol.get_EntireColumn();
if (entireCol.get_Hidden())
entireCol.Delete( xlShiftToLeft );
}

关于c++ - 如何使用自动化在 C++ 中迭代 Excel 列的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/593037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com