乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 用<em>VC</em>读取含有多个工作表的<em>EXCEL</em>

用<em>VC</em>读取含有多个工作表的<em>EXCEL</em>

作者:乔山办公网日期:

返回目录:excel表格制作


两种方式:一种是手动,一种是代码或宏
一:手动导出时,右键单击要导出的表\查询\窗体等对象,选择导出,然后选择导出格式为EXCEL的某版本,再点"导出"按钮即可.手动导入时,右键单击空白处,选择导入,在导入类型中选择EXCEL,然后找到自己要导入的文件,按提示一步步做就行了
二:用宏导出,在宏窗口中,选择新建,然后在操作中选择或输入outputto,再选择对象类型\名称,输出地址等,保存宏,然后即可双击宏即可实现导出,导入则要在操作中选择或输入TransferDatabase,其它设置类同,多试几次就知道了.至于代码,将宏转换成代码就知道了

//创建数据库,即一个Excel的XLS文件
  ConnStr = "Driver={Microsoft Excel Driver (*.xls)};DBQ="+FileName+";";
  ADOConnection->ConnectionString = WideString(ConnStr);
  ADOConnection->Open();

  //

  //创建表,创建成功后再Xls文件中就能看见这个页
  ADOSQL = "CREATE TABLE "+SheetName+"(序号 varchar(8),核算网点号 varchar(12),账号总数 varchar(12),有效e79fa5e98193e59b9ee7ad94331账号数 varchar(12),已推广数 varchar(12),新账号总数 varchar(12),新有效账号数 varchar(12),新已推广数 varchar(12))";

  ADOQuery->SQL->Text = ADOSQL;
  ADOQuery->ExecSQL();

  //打开创建好的表,然后向里面写数据
  ADOSQL = "SELECT 序号,核算网点号,账号总数,有效账号数,已推广数,新账号总数,新有效账号数,新已推广数 FROM "+SheetName;
  ADODataSet->Close();
  ADODataSet->CommandText = WideString(ADOSQL);
  ADODataSet->Open();

  ADODataSet->Append();
  ADODataSet->FieldValues["序号"] = AnsiString(sn+1);
  ADODataSet->FieldValues["核算网点号"] =strVBOT;
  ADODataSet->FieldValues["新已推广数"] = AnsiString(nExtendAccNew);
  ADODataSet->Post();
//创建数据库,即一Excel的XLS文件 ConnStr = "Driver={Microsoft Excel Driver (*.xls)};DBQ="+FileName+";"; ADOConnection->ConnectionString = WideString(ConnStr); ADOConnection->Open(); // //创建表,创建成功后再Xls文件中就能看见...

针对Excel表格文件操作的编程实现
编译:徐景周

下载本文示例源代码

简介
通过本文及配套示例源码你可以更加灵活的控制Excel表格文件,其中包括创建新Excel文件、写入表格数据、读取表格数据(包括对原建Excel文件自已手工添加的行、列数据的准确读取),删除已有Excel表格,对表格中指定行、列、单元格进行查询、插入、替换等操作,同时还可以将生成的Excel文件转换为按指定分隔符分隔的其它文本格式的文件。下面是把此方法用VC6编写的示例程序运行效果:

基本思路
基础实现方法同上篇文章《直接通过ODBC读、写Excel表格文件》相同,都是通过ODBC来把Excel表格文件当成数据库文件来进行读、写等操作,所以在Excel表格文件中写入的行头名必须是唯一的(不要重名,相当于数据库中的ID值)。本文中对Excel文件的操作都被封装进一个类CSpreadSheet中,通过它我们可以非常简便的实现各种Excel表格数据操作,并且可以对该类进行扩充来满足自己的需求。

具体实现

一、 包含Excel文件操作类头文件

#include "CSpreadSheet.h"
二、 新建Excel文件,并写入默认数据 // 新建Excel文件名及路径,TestSheet为内部表名
CSpreadSheet SS("c:\\Test.xls", "TestSheet");

CStringArray sampleArray, testRow;

SS.BeginTransaction();

// 加入标题
sampleArray.RemoveAll();
sampleArray.Add("姓名");
sampleArray.Add("年龄");
SS.AddHeaders(sampleArray);

// 加入数据
CString strName[] = {"徐景周","徐志慧","郭徽","牛英俊","朱小鹏"};
CString strAge[] = {"27","23","28","27","26"};
for(int i = 0; i < sizeof(strName)/sizeof(CString); i++)
{
sampleArray.RemoveAll();
sampleArray.Add(strName[i]);
sampleArray.Add(strAge[i]);
SS.AddRow(sampleArray);
}

SS.Commit();

三、 读取Excel文件数据 CSpreadSheet SS("c:\\Test.xls", "TestSheet");

CStringArray Rows, Column;

//清空列表框
m_AccessList.ResetContent();
for (int i = 1; i <= SS.GetTotalRows(); i++)
{
// 读取一行
SS.ReadRow(Rows, i);
CString strContents = "";
for (int j = 1; j <= Rows.GetSize(); j++)
{
if(j == 1)
strContents = Rows.GetAt(j-1);
else
strContents = strContents + " --> " + Rows.GetAt(j-1);
}

m_AccessList.AddString(strContents);
}

四、 对已存在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();
五、e68a84e799bee5baa6330 对已存在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

相关阅读

  • -vc 写excel,vc excel

  • 乔山办公网excel表格制作
  • 我晕,你不是专百门搞 C++ 的吧。明显度语法错误嘛。CString str1,str2,str3;str1=m_list1.GetItemText(1,1);str2=m_list1.GetItemText(1,2);str3=m_list1.GetItemText(1,3);sSql.Forma
  • -springmvc excel导入,springmvc导入配置文件

  • 乔山办公网excel表格制作
  • 先要看你A列的格式是不是文本,如果是文本的话,那么就直接根据文字去判断你这个数抄据好像在第二行开始的B2公式, =if(OR(right(A2,1)="六“,right(A2,1)="日”),"是“,"否“)如果是日期
关键词不能为空
极力推荐
  • 如何在<em>Excel</em>输入<em>固定内容</em>-exc

  • 1.ctrl+a全选——开始——字体——选择需要的字体,如图:2.开始——字体——选择需要的字号,如图:excel中如何在一个单元格内输入文字或文本,会自动添加原..." src="/uploads/tu/345.jp

ppt怎么做_excel表格制作_office365_word文档_365办公网