//VT_R8 int Illusion_ExcelFile::get_cell_int(long iline, long icolumn) { int num; COleVariant vresult; if (already_preload_ == FALSE) { CRange range; _variant_t v_row((long)iline); _variant_t v_column((long)icolumn); range.AttachDispatch(excel_current_range_.get_Item(v_row, v_column).pdispVal, true); vresult = range.get_Value2(); range.ReleaseDispatch(); } else { long read_address[2]; VARIANT val; read_address[0] = iline; read_address[1] = icolumn; ole_safe_array_.GetElement(read_address, &val); vresult = val; } // num = static_cast<int>(vresult.dblVal); return num; }
CString Illusion_ExcelFile::get_cell_cstring(long iline, long icolumn) { COleVariant vResult ; CString str; //字符串 if (already_preload_ == FALSE) { CRange range; _variant_t v_row(iline); _variant_t v_column(icolumn); range.AttachDispatch(excel_current_range_.get_Item(v_row, v_column).pdispVal, true); vResult = range.get_Value2(); range.ReleaseDispatch(); } //如果数据依据预先加载了 else { long read_address[2]; VARIANT val; read_address[0] = iline; read_address[1] = icolumn; ole_safe_array_.GetElement(read_address, &val); vResult = val; } if (vResult.vt == VT_BSTR) { str = vResult.bstrVal; } //整数 else if (vResult.vt == VT_INT) { str.Format(_T("%d"), vResult.pintVal); } //8字节的数字 else if (vResult.vt == VT_R8) { str.Format(_T("%.6f"), vResult.dblVal); } //时间格式 else if (vResult.vt == VT_DATE) { SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st); CTime tm(st); str = tm.Format(_T("%Y-%m-%d")); } //单元格空的 else if (vResult.vt == VT_EMPTY) { str = ""; } return str; }
//检查一个CELL是否是数值 BOOL Illusion_ExcelFile::is_cell_number(long iline, long icolumn) { CRange range; _variant_t v_row((long)iline); _variant_t v_column((long)icolumn); range.AttachDispatch(excel_current_range_.get_Item(v_row, v_column).pdispVal, true); VARIANT vResult = range.get_Value2(); //好像一般都是VT_R8 if (vResult.vt == VT_INT || vResult.vt == VT_R8) { return TRUE; } return FALSE; }
//检查一个CELL是否是字符串 BOOL Illusion_ExcelFile::is_cell_string(long irow, long icolumn) { CRange range; _variant_t v_row((long)irow); _variant_t v_column((long)icolumn); range.AttachDispatch(excel_current_range_.get_Item(v_row, v_column).pdispVal, true); COleVariant vResult = range.get_Value2(); //VT_BSTR标示字符串 if (vResult.vt == VT_BSTR) { return TRUE; } return FALSE; }
void Illusion_ExcelFile::set_cell_int(long iline, long icolumn, int new_int) { _variant_t new_value((long)new_int); _variant_t v_pos("A1"); CRange start_range = excel_work_sheet_.get_Range(v_pos, CONST_VARIANT_OPTIONAL); _variant_t v_row((long)iline - 1); _variant_t v_column((long)icolumn - 1); CRange write_range = start_range.get_Offset(v_row, v_column); write_range.put_Value2(new_value); start_range.ReleaseDispatch(); write_range.ReleaseDispatch(); }
std::vector<std::vector<float> > matrix_to_array_v(Rcpp::NumericMatrix& mat) { std::vector<std::vector<float> > v; if(!mat.ncol() || !mat.nrow()) return(v); v.resize(mat.nrow()); std::vector<float> v_row(mat.ncol()); // = new float[ mat.ncol() * mat.nrow() ]; for(unsigned int i=0; i < (unsigned int)mat.nrow(); ++i){ for(unsigned int j=0; j < (unsigned int)mat.ncol(); ++j){ v_row[j] = (float)mat(i, j); } v[i] = v_row; } return(v); }