GetCellData()でメモリの使用量が上がる
アプリケーションからページを出力する際にメモリが上がっているので調べたところ、
GetCellData関数の
if(formula) data = range.GetFormula();
else data = range.GetValue(vtMissing);
で上がるのを確認しました。
ですが初心者なので、どう直すか悩んでおります。
メモリ使用量を減らすには、どうしたらよいでしょうか。
内容につきましてはマルチポストです。
https://teratail.com/questions/165797
GetCellData関数1
void CExcelCtrl::GetCellData(int cols,int rows,int cole,int rowe,CStringArray &dt,bool formula){
CString sc,ec;
sc.Format("%s%d",Num2Col(cols),rows);
ec.Format("%s%d",Num2Col(cole),rowe);
GetCellData(sc,ec,dt,formula);}
GetCellData関数2
void CExcelCtrl::GetCellData(LPCSTR sc,LPCSTR ec,CStringArray &dt,bool formula){
try{
//_Application m_excel;
_Worksheet ws = m_excel.GetActiveSheet();
Range range = ws.GetRange(COleVariant(sc),COleVariant(ec));
COleVariant data;
if(formula) data = range.GetFormula();
else data = range.GetValue(vtMissing);
COleSafeArray sa;
sa.Attach(data);
long rowmax,colmax;
sa.GetUBound(1,&rowmax);
sa.GetUBound(2,&colmax);
CString str;
VARIANT val;
long idx[2];
dt.RemoveAll();
for(long row = 1;row <= rowmax;row++){
idx[0] = row;
for(long col = 1;col <= colmax;col++){
idx[1] = col;
sa.GetElement(idx,&val);
switch(val.vt){
case VT_R8:
str.Format("%1.2f", val.dblVal);
break;
case VT_BSTR:
str.Format("%s",(CString)val.bstrVal);
::SysFreeString(val.bstrVal);
break;
case VT_EMPTY:
str.Empty();
break;
}
dt.Add(str);
}
}
}catch(COleDispatchException *e){
AfxMessageBox(e->m_strDescription,MB_ICONEXCLAMATION);
dt.RemoveAll();
}