WEB开发网
开发学院软件开发VC 针对Excel表格文件操作的编程实现 阅读

针对Excel表格文件操作的编程实现

 2008-04-19 20:27:46 来源:WEB开发网   
核心提示:四、 对已存在Excel表格数据进行添加、插入、替换操作// 初始化测试行数据,进行添加、插入及替换数据操作演示for (int k = 1; k <= 2; k++){testRow.Add("Test");}SS.AddRow(testRow);// 添加到尾部SS.AddRow(test

四、 对已存在Excel表格数据进行添加、插入、替换操作

// 初始化测试行数据,进行添加、插入及替换数据操作演示
for (int k = 1; k <= 2; k++)
{
  testRow.Add("Test");
}
  
SS.AddRow(testRow);    // 添加到尾部
SS.AddRow(testRow, 2);    // 插入新行到第二行
SS.AddRow(testRow, 6, true);  // 替换原第四行来新的内容
SS.AddCell("徐景周", 1,2);  // 添加(不存在)或替换(存在)第二行,第一列单元格内容
SS.Commit();  
五、 对已存在Excel表格数据进行行、列、单元格查询

void CExcelAccessDlg::OnQuery()
{
  CSpreadSheet SS("c:\\Test.xls", "TestSheet");
  CStringArray Rows, Column;
  CString tempString = "";
  UpdateData();
  if(m_strRow == "" && m_strColumn == "")     // 查询为空
  {
    AfxMessageBox("行号、列号不能同时为空!");
    return;
  }  
  else if(m_strRow == "" && m_strColumn != "")  // 查询指定列数据
  {
    int iColumn = atoi(m_strColumn);
    int iCols = SS.GetTotalColumns();
    if(iColumn > iCols)  // 超出表范围查询时
    {
      CString str;
      str.Format("表中总列数为: %d, ", iCols);
      AfxMessageBox(str + " 查询列数大于Excel表中总列数,请重新输入!");
      return;
    }
    // 读取一列数据,并按行读出
    if(!SS.ReadColumn(Column, iColumn))
    {
      AfxMessageBox(SS.GetLastError());
      return;
    }
    CString tmpStr;
    for (int i = 0; i < Column.GetSize(); i++)
    {
      tmpStr.Format("行号: %d, 列号: %d ,内容: %s\n", i+1,iColumn,Column.GetAt(i));
      tempString += tmpStr;
    }
    
    AfxMessageBox(tempString);
  }
  else if(m_strRow != "" && m_strColumn == "")   // 查询指定行数数据
  {
    int iRow = atoi(m_strRow);
    int iRows = SS.GetTotalRows();
    
    if(iRow > iRows)  // 超出表范围查询时
    {
      CString str;
      str.Format("表中总行数为: %d, ", iRows);
      AfxMessageBox(str + " 查询行数大于Excel表中总行数,请重新输入!");
      return;
    }
    // 读取指定行数据
    if(!SS.ReadRow(Rows, iRow))
    {
      AfxMessageBox(SS.GetLastError());
      return;
    }
    CString tmpStr;
    for (int i = 0; i < Rows.GetSize(); i++)
    {
      tmpStr.Format("行号: %d, 列号: %d ,内容: %s\n", iRow, i+1, Rows.GetAt(i));
      tempString += tmpStr;
    }
    AfxMessageBox(tempString);
  }
  else if(m_strRow != "" && m_strColumn != "")   // 查询指定单元格数据
  {
    int iRow = atoi(m_strRow), iColumn = atoi(m_strColumn);
    int iRows = SS.GetTotalRows(), iCols = SS.GetTotalColumns();
    
    if(iColumn > iCols)       // 超出表范围查询时
    {
      CString str;
      str.Format("表中总列数为: %d, ", iCols);
      AfxMessageBox(str + " 查询列数大于Excel表中总列数,请重新输入!");
      return;
    }
    else if(iRow > iRows)
    {
      CString str;
      str.Format("表中总行数为: %d, ", iRows);
      AfxMessageBox(str + " 查询行数大于Excel表中总行数,请重新输入!");
      return;
    }
    // 读取指定行、列单元格数据
    if(!SS.ReadCell(tempString, iColumn, iRow))
    {
      AfxMessageBox(SS.GetLastError());
      return;
    }
    CString str;
    str.Format("行号: %d, 列号: %d ,内容: %s", iRow,iColumn,tempString);
    AfxMessageBox(str);
  }
  
}

六、 将存在的Excel转换另存为指定分隔的文本文件

// 将原Excel文件转换为用分号分隔的文本,并另存为同名文本文件
SS.Convert(";");
七、 删除Excel中表格

SS. DeleteSheet();      // 删除Excel文件中所有表格
SS. DeleteSheet(" TestSheet "); // 删除Excel中TextSheet表格
八、 获取Excel中总行数、总列数、当前行

int iCols = SS.GetTotalColumns();  // 总列数
int iRows = SS.GetTotalRows();  // 总行数
int iCurRow = SS.GetCurrentRow(); // 当前所在行号
九、 获取行头数据

CStringArray rowHeader;
SS.GetFieldNames(rowHeader);
CString tmpStr;
for (int i = 0; i < rowHeader.GetSize(); i++)
{
    tmpStr.Format("行号: %d, 列号: %d ,内容: %s\n", 1, i+1, rowHeader.GetAt(i));
    tempString += tmpStr;
}
AfxMessageBox(tempString);

最后,如果想知道详细实现细节的话,可以在下载示例源码后,仔细查看源码既可(内有详细注释)。

参考文献:

直接通过ODBC读、写Excel表格文件 – 徐景周(译)

A Class to Read and Write to Excel and Text Delimited Spreadsheet – Yap Chun Wei

上一页  1 2 

Tags:针对 Excel 表格

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接