在excel中录制宏可以获得以下vba代码:
Range("C3").Select
ActiveWindow.FreezePanes = True
然后根据以上代码去猜测cpp代码如何写,实际很难。但可以猜到关键函数SetFreezePanes。
网上有个C#的库NPOI,据说可以不安装office就可以操作excel,NPOI中有个函数CreateFreezePane实现了excel冻结窗格。
以后可以考虑下载C#的NPOI来参考着写CPP的office操作代码。
搜索:excel cpp SetFreezePanes(true) 可以找到以下网页:
https://blog.csdn.net/feng_a_feng/article/details/110084560
参考以后,封装函数如下:
bool FreezeSheet(Excel::Worksheet *sheet, const int iRowCount, const int iColCount)
{
if (NULL == sheet)
{
return false;
}
if (iRowCount == 0 && iColCount == 0)
{
return false;
}
Excel::Range *range_used = sheet->UsedRange();
if (range_used == NULL)
{
return false;
}
Excel::Range *range_rows = range_used->Rows();
if (range_rows == NULL)
{
return false;
}
Excel::Range *range_cols = range_used->Columns();
if (range_cols == NULL)
{
return false;
}
int excel_row_count = range_rows->Count(); //行数
int excel_col_count = range_cols->Count(); //列数
int iRowFreeze = iRowCount;
int iColFreeze = iColCount;
if (iRowCount > excel_row_count)
{
iRowFreeze = excel_row_count;
}
if (iColCount > excel_col_count)
{
iColFreeze = excel_col_count;
}
if (iRowFreeze == 0 && iColFreeze == 0)
{
return false;
}
//
sheet->Activate();
Excel::Window *pWindow = excel_->ActiveWindow();
if (NULL == pWindow)
{
return false;
}
pWindow->SetFreezePanes(false); //首先先把冻结窗格去掉,防止Excel已经设置的冻结窗格导致后面设置的不成功。
pWindow->SetSplitColumn(iColFreeze); //iColCount为0时,只冻结行
pWindow->SetSplitRow(iRowFreeze); //iRowCount为0时,只冻结列
pWindow->SetFreezePanes(true); //设置冻结窗格属性为true
return true;
}