0 } 361 return &m_Cells[rowIndex][colIndex]; 362} 363 364CODBCExcelCell* CODBCExcelSheet::Cell(UINT rowIndex, const CString& strColName) 365{ 366 if (rowIndex > 65535) return 0; 367 368 ASSERT(m_dwCols == m_ColHeaders.GetCount()); 369 UINT colIndex; 370 for (colIndex = 0; colIndex < m_dwCols; ++colIndex) 371 { 372 if (m_ColHeaders[colIndex] == strColName) 373 { 374 break; 375 } 376 } 377 if (colIndex >= m_dwCols) return 0; 378 if (rowIndex >= m_dwRows) 379 { 380 m_dwRows += 1; 381 m_Cells.resize(m_dwRows); 382 for (DWORD dwRow = 0; dwRow < m_dwRows; ++dwRow) 383 { 384 m_Cells[dwRow].resize(m_dwCols); 385 for (DWORD dwCol = 0; dwCol < m_dwCols; ++dwCol) 386 { 387 m_Cells[dwRow][dwCol].SetParent(this); 388 } 389 } 390 } 391 return &m_Cells[rowIndex][colIndex]; 392} 393 394int CODBCExcelSheet::GetColHeader(const CString& strColName) const 395{ 396 for (int col = 0; col < m_dwCols; ++col) 397 { 398 if (m_ColHeaders[col] == strColName) 399 return col; 400 } 401 return -1; 402} 403 404int CODBCExcelSheet::GetRow(const CString& strColName, const CString& strCellText) 405{ 406 int col = GetColHeader(strColName); 407 if (-1 == col) return -1; 408 for (int row = 0; row < m_dwRows; ++row) 409 { 410 if (m_Cells[row][col].m_strVal == strCellText) 411 return row; 412 } 413 return -1; 414} 415 416////////////////////////////////////////////////////////////////////////// 417CODBCExcelCell::CODBCExcelCell(): 418m_Sheet(NULL)br /> 419{ 420} 421 422void CODBCExcelCell::Set(const CDBVariant& dbVal) 423{ 424 switch(dbVal.m_dwType) 425 { 426 case DBVT_NULL: 427 case DBVT_DATE: 428 case DBVT_BINARY: 429 m_strVal.Empty(); 430 break; 431 432 case DBVT_BOOL: 433 if (dbVal.m_boolVal) m_strVal = _T("0"); 434 else m_strVal = _T("1"); 435 break; 436 437 case DBVT_UCHAR: 438 m_strVal.Format(_T("%c"), dbVal.m_chVal); 439 break; 440 441 case DBVT_SHORT: 442 m_strVal.Format(_T("%d"), dbVal.m_iVal); 443 break; 444 445 case DBVT_LONG: 446 m_strVal.Format(_T("%ld"), dbVal.m_lVal); 447 break; 448 449 case DBVT_SINGLE: 450 { 451 long lVal = (long)dbVal.m_fltVal; 452 if (dbVal.m_fltVal != (float)lVal) 453 m_strVal.Format(_T("%f"), dbVal.m_fltVal); 454 else 455 m_strVal.Format(_T("%ld"), lVal); 456 } 457 break; 458 459 case DBVT_DOUBLE: 460 { 461 long lVal = (long)dbVal.m_dblVal; 462 if (dbVal.m_dblVal != (double)lVal) 463 m_strVal.Format(_T("%f"), dbVal.m_dblVal); 464 else 465 m_strVal.Format(_T("%ld"), lVal); 466 } 467 break; 468 469 case DBVT_STRING: 470 m_strVal = *dbVal.m_pstring; m_strVal.Trim(); 471 break; 472 473 case DBVT_ASTRING: 474 m_strVal = *dbVal.m_pstringA; m_strVal.Trim(); 475 break; 476 477 case DBVT_WSTRING: 478 m_strVal = *dbVal.m_pstringW; m_strVal.Trim(); 479 break; 480 481 default: ASSERT(FALSE); break; 482 } |