예제 #1
0
//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;
}
예제 #2
0
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;
}
예제 #3
0
//检查一个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;
}
예제 #4
0
//检查一个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;
}
예제 #5
0
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();
}
예제 #6
0
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);
}