社区
C++ Builder
帖子详情
请教一个关于数据库导入导出到Excel的问题?
lihongxing2002
2003-08-05 11:53:59
请问用BCB怎么实现SQL2000的数据导出到Excel里面呢?还有类似将Excel里的数据导入到数据库中呢?
...全文
195
25
打赏
收藏
请教一个关于数据库导入导出到Excel的问题?
请问用BCB怎么实现SQL2000的数据导出到Excel里面呢?还有类似将Excel里的数据导入到数据库中呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Rurama
2003-08-11
打赏
举报
回复
//Write Excel
try
{
DataTotal->ADOQueryExBcs->Close();
DataTotal->ADOQueryExBcs->SQL->Clear();
DataTotal->ADOQueryExBcs->SQL->Add("Select * from ExName");
DataTotal->ADOQueryExBcs->Open();
DataTotal->ADOQueryExBcs->First();
while ( !DataTotal->ADOQueryExBcs->Eof )
{
AnsiString strDataName,strSQL,strExName;
strExName = Trim(DataTotal->ADOQueryExBcs->FieldByName("c_ex_name")->AsString);
strDataName = Trim(DataTotal->ADOQueryExBcs->FieldByName("c_data_name")->AsString);
strSQL = "Select * from "+strDataName+" order by totid";
DataTotal->ADOQueryExData->Close();
DataTotal->ADOQueryExData->SQL->Clear();
DataTotal->ADOQueryExData->SQL->Add(strSQL);
DataTotal->ADOQueryExData->Open();
DataTotal->ADOQueryExData->First();
AnsiString str;
DataTotal->ADOQueryExData->First();
int iLineR = DataTotal->ADOQueryExData->RecordCount; //行
int iLineL = DataTotal->ADOQueryExData->FieldCount; //列
iLineL--;
int iLineRGo,iLineLGo,iLineRExName;
iLineRGo = 2;
iLineLGo = 1;
AnsiString strDataAdd ;
str = ExtractFileDir(Application->ExeName);
str +="\\Excelres\\"+strExName;
AnsiString strDataHtitle = Trim(DataTotal->ADOQueryExData->Fields->FieldByName("Htitle")->AsString);
AnsiString strExcelHtitle ;
myExcel->OpenExcelFile(str,false,false);
DataTotal->ADOQueryExData->First();
for ( int i=0;i<iLineR;i++ )
{
for ( int j=3;j<=iLineL+1;j++ )
{
if ( Trim(DataTotal->ADOQueryExData->Fields->FieldByNumber(j)->AsString)!="" )
{
strDataAdd = DataTotal->ADOQueryExData->Fields->FieldByNumber(j)->AsString;
myExcel->SetCellValue(i+2,j-2,strDataAdd.c_str());
myExcel->WorkBookSave();
}
else
{
if ( j == 3 )
{
strDataAdd = " ";
}
else
{
strDataAdd = 0;
}
myExcel->SetCellValue(i+2,j-2,strDataAdd.c_str());
myExcel->WorkBookSave();
}
}
DataTotal->ADOQueryExData->Next();
}
myExcel->QuitExcel();
DataTotal->ADOQueryExBcs->Next();
f_progress->progress->Progress++;
}
AnsiString str1 = ExtractFileDir(Application->ExeName);
str1 +="\\Excelres\\";
str1 = "数据汇总完毕,结果存于"+str1+"中";
Application->MessageBox(str1.c_str(),"信息提示",MB_ICONINFORMATION+MB_OK );
}
catch(...)
{
DataTotal->ADOQueryExBcs->Close();
DataTotal->ADOQueryExData->Close();
myExcel->QuitExcel();
}
Rurama
2003-08-11
打赏
举报
回复
#include <vcl.h>
#pragma hdrstop
#include "OperateExcel2k.h"
void OperateExcel::OpenExcel()
{
ExcelApp =Variant::CreateObject("Excel.Application");
ExcelApp.OlePropertySet ("visible",true);
Workbook=ExcelApp.OlePropertyGet("ActiveWorkBook");
}
//---------------------------------------------------------------------------
void OperateExcel::OpenExcelFile(AnsiString str_ExcelFileName,bool Visibled,bool IfReadOnly)
{
//创建excel对象
ExcelApp =Variant::CreateObject("Excel.Application");
ExcelApp.OlePropertyGet("WorkBooks").OleProcedure("Open",str_ExcelFileName,NULL,IfReadOnly);
ExcelApp.OlePropertySet ("visible",Visibled);
Workbook=ExcelApp.OlePropertyGet("ActiveWorkBook");
WorkSheet=Workbook.OlePropertyGet("ActiveSheet");
}
//---------------------------------------------------------------------------
void OperateExcel::SetCellValue(int iRowNO, int iColumnNO, Variant Value)
{
WorkSheet.OlePropertyGet("Cells",iRowNO,iColumnNO).OlePropertySet("Value",Value);
}
//---------------------------------------------------------------------------
void OperateExcel::SetCellValue(int iRowNO, int iColumnNO, char* Value)
{
WorkSheet.OlePropertyGet("Cells",iRowNO,iColumnNO).OlePropertySet("Value",Value);
}
//---------------------------------------------------------------------------
void OperateExcel::WorkBookSave()
{
Workbook.OleProcedure("Save");
}
//---------------------------------------------------------------------------
void OperateExcel::WorkBookClose()
{
Workbook.OleProcedure("Close");
}
//---------------------------------------------------------------------------
void OperateExcel::WorkBookSaveAs(AnsiString str_FileName)
{
Workbook.OleProcedure("Close",str_FileName);
}
//---------------------------------------------------------------------------
void OperateExcel::ResetArray1D()
{
memset(str_DataArray1D, 0, 16 );
}
//---------------------------------------------------------------------------
void OperateExcel::ResetArray2D()
{
memset(str_DataArray2D, 0, 16 );
}
//---------------------------------------------------------------------------
void OperateExcel::SetRowValue(int iRowNO, int iColumnNO, int iElementsNum)
{
int i=0;
while(i<iElementsNum)
{
SetCellValue(iRowNO,i,str_DataArray1D[i]);
i++;
}
}
//---------------------------------------------------------------------------
void OperateExcel::SetColumnValue(int iRowNO, int iColumnNO, int iElementsNum)
{
int i=0;
while(i<iElementsNum)
{
SetCellValue(i,iColumnNO,str_DataArray1D[i]);
i++;
}
}
//---------------------------------------------------------------------------
AnsiString OperateExcel::GetValueFromCell(int iRowNO, int iColumnNO)
{
AnsiString str_Value;
str_Value=WorkSheet.OlePropertyGet("cells",iRowNO,iColumnNO).OlePropertyGet("Value");
return str_Value;
}
//---------------------------------------------------------------------------
bool OperateExcel::CellMerged(int iRowNO,int iColumnNO)
{
return WorkSheet.OlePropertyGet("Cells",iRowNO,iColumnNO).OlePropertyGet("MergeCells");
}
//---------------------------------------------------------------------------
void OperateExcel_v2::ReadValueByRow(int iTop, int iLeft, int iBottom, int iRight)
{
int i=0;
int iCount=0;
AnsiString temp;
for(int iRowNO=iTop;iRowNO<=iBottom;iRowNO++,i++)
{
int iColumnNO=iLeft;
int j=0;
while(iColumnNO<=iRight)
{
temp=GetValueFromCell(iRowNO,iColumnNO) ;
str_DataArray2D[i][j]=temp;
if(CellMerged(iRowNO,iColumnNO)==false)
{j++;iColumnNO++;}
else if(CellMerged(iRowNO,iColumnNO)==true)
{
iCount=WorkSheet.OlePropertyGet("Cells",iRowNO,iColumnNO).OlePropertyGet("MergeArea").OlePropertyGet("Count");
for(int num=0;num<iCount;num++,j++,iColumnNO++)
str_DataArray2D[i][j]=temp+":"+AnsiString(num);
}
}
}
}
//---------------------------------------------------------------------------
void OperateExcel_v2::SendDataToDataSet(TDataSet* pDataSet,int iColumnsNumber,int iRowsNumber)
{
for(int iRowNo=0;iRowNo<iRowsNumber;iRowNo++)
{
pDataSet->Insert();
for(int iColumnNo=1;iColumnNo<=iColumnsNumber;iColumnNo++)
{
pDataSet->Fields->FieldByNumber(iColumnNo)->Value=str_DataArray2D[iRowNo][iColumnNo-1];
}
}
pDataSet->Post();
}
//---------------------------------------------------------------------------
int OperateExcel::GetUsedRowCount()
{
return WorkSheet.OlePropertyGet("UsedRange").OlePropertyGet("Rows").OlePropertyGet("Count");
}
//---------------------------------------------------------------------------
int OperateExcel::GetUsedColCount()
{
return WorkSheet.OlePropertyGet("UsedRange").OlePropertyGet("Columns").OlePropertyGet("Count");
}
//---------------------------------------------------------------------------
void OperateExcel::QuitExcel()
{
if(!ExcelApp.IsEmpty())
ExcelApp.OleProcedure("Quit") ;
}
//---------------------------------------------------------------------------
Rurama
2003-08-11
打赏
举报
回复
#ifndef OperateExcel2kH
#define OperateExcel2kH
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include "vcl\utilcls.h"
class OperateExcel
{
protected:
Variant ExcelApp,Workbook,WorkSheet,Cell;
public:
Variant & excelApp(){};
Variant & workbook(){return Workbook;}
Variant & workSheet(){return WorkSheet;}
Variant & cell(){return Cell;}
OperateExcel(){ }
~OperateExcel(){}
AnsiString str_DataArray1D[100];
AnsiString str_DataArray2D[100][100];
public:
virtual void OpenExcel();
virtual void OpenExcelFile(AnsiString str_ExcelFileName,bool Visibled=true,bool IfReadOnly=false);
/*打开一个excel文件(文件路径及名称,是否可视,是否只读)*/
virtual void SetCellValue(int iRowNO, int iColumnNO, Variant Value);//给单元格赋值
virtual void SetCellValue(int iRowNO, int iColumnNO, char* Value); //给单元格赋值
virtual void WorkBookSave(); //存盘当前路径
virtual void WorkBookSaveAs(AnsiString str_FileName); //文件另存
virtual void WorkBookClose(); //关闭文件
virtual void ResetArray1D();
virtual void ResetArray2D();
virtual void SetRowValue(int iRowNO, int iColumnNO, int iElementsNum); //给某行赋值 (起始单元格下标,元素个数)
virtual void SetColumnValue(int iRowNO, int iColumnNO, int iElementsNum);//给某列赋值 (起始单元格下标,元素个数)
virtual AnsiString GetValueFromCell(int iRowNO, int iColumnNO);//从某一单元格取值
virtual bool CellMerged(int iRowNO,int iColumnNO);
virtual int GetUsedRowCount();
virtual int GetUsedColCount();
virtual void QuitExcel();
};
class OperateExcel_v2:public OperateExcel
{
public:
void ReadValueByRow(int iTop, int iLeft, int iBottom, int iRight);
void virtual SendDataToDataSet(TDataSet * pDataSet,int iColumnsNumber,int iRowsNumber);
};
#endif
RamjetZhang
2003-08-10
打赏
举报
回复
楼主:
找到一个VC的,
http://www.csdn.net/develop/article/14/14926.shtm
直接通过ODBC读、写Excel表格文件
译者:徐景周
想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行:
1. 在StdAfx.h文件中加入:
include <afxdb.h>
include <odbcinst.h>
2. 通过ODBC直接创建Excel文件(暂定文件名:Demo.xls)
//创建并写入Excel文件
void CRWExcel::WriteToExcel()
{
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile = "c:\\demo.xls"; // 要建立的Excel文件
CString sSql;
TRY
{
whp320
2003-08-10
打赏
举报
回复
我觉得这个问题很有用处。保留。
真如实观
2003-08-10
打赏
举报
回复
建议用ole自动化,ADO连接Excel必须预先建好Excel文件,而且把数据写入Excel较难。
RamjetZhang
2003-08-09
打赏
举报
回复
在ODBC数据源里面连好,(odbcad32.exe),然后用ADO或者BDE,随便做。
不比文本数据库好到哪里去。记住表名前面有个$的(莫名其妙的设计),所以引用的时候是[$sheet1],用table可能连不上,用query没问题。
lihongxing2002
2003-08-09
打赏
举报
回复
to: RamjetZhang(我曾经不是一头猪)
我还是不太明白到底该怎么做,给个例子行吗?先谢谢了
cxlfreefly
2003-08-08
打赏
举报
回复
老兄是否也可以给我一份呢。先表示感谢
cxlfreefly@hotmail.com
nightdays
2003-08-08
打赏
举报
回复
老兄,我也想要一份,多谢了.
nightday@21cn.com
RamjetZhang
2003-08-08
打赏
举报
回复
用ODBC里面的excel驱动。
lo0P
2003-08-08
打赏
举报
回复
我也要lo0P@tom.com
lihongxing2002
2003-08-07
打赏
举报
回复
to: RamjetZhang(我曾经不是一头猪)
用ADO该怎么做呢?有具体的例子吗?包括怎么连接Excel,等等。发一个过来
duduwolf
2003-08-06
打赏
举报
回复
这个不够用你给我发消息留下mail,我给你发过来,太多了
duduwolf
2003-08-06
打赏
举报
回复
我这个函数直接就打开了一个excel,然后将数据显示在excel里面,如果你想要程序自动保存成xls格式的话你可以不要这句ex.OlePropertySet("Visible",(Variant)true); //使Excel启动后可见
我在给你几篇文章,你保存好,以后一定能用得到:)
(一)
要在应用程序中控制Excel2000的运行,首先必须在编制自动化客户程序时使其头文件要包含Comobj.hpp和Utilcls.h。
即:#include<Comobj.hpp>
#include<Utilcls.h>
C++ Builder开发者把Excel自动化对象的功能包装在下面的四个Ole Object Class函数中,应用人员可以很方便地进行调用。
设置对象属性:Variant OlePropertySet(属性名,参数……);
获得对象属性:void OlePropertyGet(属性名,参数……);
调用对象方法:1) Variant OleFunction(函数名,参数……);
2) void OleProcedure(过程名,参数……);
C++ Builder中使用OLE控制Excel2000,必须掌握Excel2000的自动化对象及Microsoft Word Visual Basic帮助文件中的关于Excel的对象、方法和属性。对象是一个Excel元素,属性是对象的一个特性或操作的一个方面,方法是对象可以进行的动作。
1、Excel中常用的对象是:Application,Workbooks,Worksheets等。
(1) 创建应用对象:如:
Variant ex;
ex=Variant::CreateObject ("Excel.Application");
或者 ex=CreateOleObject ("Excel.Application");
(2) 创建工作簿对象:
Variant wb;
wb=ex.OlePropertyGet("ActiveWorkBook");
(3) 创建工作表对象:
Variant sheet;
sheet=wb.OlePropertyGet("ActiveSheet");
(4) 创建区域对象:
Variant range;
range=sheet.OlePropertyGet("Range","A1:A10");
2、常用的属性操作:
(1)新建EXCEL文件:
(a):新建系统模板的工作簿
ex.OlePropertyGet("workbooks").OleFunction("Add") //默认工作簿
ex.OlePropertyGet("workbooks").OleFunction("Add",1) //单工作表
ex.OlePropertyGet("workbooks").OleFunction("Add",2) //图表
ex.OlePropertyGet("workbooks").OleFunction("Add",3) //宏表
ex.OlePropertyGet("workbooks").OleFunction("Add",4) //国际通用宏表
ex.OlePropertyGet("workbooks").OleFunction("Add",5) //与默认的相同
ex.OlePropertyGet("workbooks").OleFunction("Add",6) //工作簿且只有一个表
(b):新建自己创建的模板的工作簿
ex.OlePropertyGet("workbooks").OleFunction("Add","C:\\WINDOWS\\Profiles\\test2\\Application Data\\Microsoft\\Templates\\result.xlt"); // 后面写上模板的完全路径,注意“\\”
(2)打开工作簿:
ex.OlePropertyGet("workbooks").OleFunction("open","路径名.xls")
(3)保存工作簿:
wb.OleFunction("Save"); //表格保存
wb..OleFunction("SaveAs","文件名"); //表格保存为,文件路径注意用“\\”
(4)退出EXCEL:
ex.OleFunction ("Quit");
(5)设置字体:
(a):设置单元格字体
sheet.OlePropertyGet("Cells",1,1).OlePropertyGet("Font").OlePropertySet("Name","隶书");
sheet.OlePropertyGet("Cells",2,3).OlePropertyGet("Font").OlePropertySet("size",28);
(b):设置所选区域字体
range.OlePropertyGet("Cells").OlePropertyGet("Font").OlePropertySet("size",28); range.OlePropertyGet("Cells").OlePropertyGet("Font").OlePropertySet("Color",
RGB(0,0,255));
其中参数的设置:
Font---Name : “隶书” //字体名称
----Size : 12 //字体大小
----Color : RGB(*,*,*) //颜色
-----Underline : true/false //下划线
-----Italic: true/false //斜体
(6)单元格的合并:
(a) range1=sheet.OlePropertyGet("Range", "A1:A2"); //A1和A2单元格合并
(b) AnsiString Str="A"+IntToStr(j)+":"+"C"+IntToStr(j);
range1=sheet.OlePropertyGet("Range",Str); //可以用变量控制单元格合并
range1.OleFunction("Merge" , false);
(7)赋值语句:
(a):指定单元格赋值
sheet.OlePropertyGet("Cells",3,6).OlePropertySet("Value",str);
sheet.OlePropertyGet("Cells",j,1).OlePropertySet("Value","共查到记录:"+IntToStr(j-6));
(b):所选区域单元格赋值
range.OlePropertyGet("Cells").OlePropertySet("Value",10);
(c):所选区域行赋值
range.OlePropertyGet("Rows",1).OlePropertySet("Value",1234);
(d):工作表列赋值
sheet.OlePropertyGet("Columns",1).OlePropertySet("Value",1234);
(8)取值语句:
AnsiString abc=sheet.OlePropertyGet("Cells",120,1).OlePropertyGet("Value");
(9)区域选择:
range.OlePropertyGet("Cells").OleFunction("Select");
(10)窗口属性:
(a)显示属性
ex.OlePropertySet("Windowstate",3); //最大化显示
参数 1---------xlNormal //正常显示
2---------xlMinimized //最小化显示
3---------xlMaximized //最大化显示
(b)状态栏属性
ex.OlePropertySet ("StatusBar","您好,请您稍等。正在查询!");
ex.OlePropertySet ("StatusBar", false); //还原成默认值
(c)标题属性:
ex.OlePropertySet("Caption","查询系统");
lihongxing2002
2003-08-06
打赏
举报
回复
还有保存到的路径也没有啊
zurong
2003-08-06
打赏
举报
回复
呵呵,坚决使用ADO,支持!!!
RamjetZhang
2003-08-06
打赏
举报
回复
我们的做法是:坚决不使用office的ole自动化
使用ado连接,表名字: $shee1,$yoursheet,两边要加方括号:
[$shhet1], [$yoursheet].
但是要write比较困难,读还是可以的。
gloom
2003-08-06
打赏
举报
回复
我也需要,请发一份到fqf@hicrown.com
谢谢
lihongxing2002
2003-08-06
打赏
举报
回复
谢谢了。我的邮箱:supperman_2002@sina.com
加载更多回复(5)
2021年计算机专业大学生实习总结.docx
2021年计算机专业大学生实习总结.docx
Android实现
Excel
数据
导入
SQLlite,并用ListView展示。并且实现模糊查询
Android实现
Excel
数据
导入
SQLlite,并用ListView展示。实现模糊查询 前言 今天朋友提出
一个
需求,有
一个
Excel
表格,需要实现把每项数据展示出来,并且可以用某一项来进行查询筛选。首先我们应该思考如何把
Excel
上的数据存入
数据库
?我的思路是直接用工具转成
数据库
文件,复制到项目里面去,然后再查出来展示,这个时候就可以用查询语句来控制我们需要的数据了。 一、怎么把
Excel
转成
数据库
文件? 把
Excel
另存为.scv文件 然后用记事本打开,另存时选择编码为UTF-8 下载 SQLit
关于
数据库
数据
导入
异常
解决数据
导出
与
导入
数据库
异常的办法 初次建表,通常会有数据设计不完整和设计错误的
问题
。而当我发现
问题
的时候,数据表已经被
导入
到
数据库
里面。那就只好删除错误的
数据库
再修改原先设计好的数据,再次
导出
的时候却怎么也导不出,究竟是什么原因,我也很苦恼...
C# Asp.net webFrom
导出
Excel
文档 超详细解读 快拿小本本~
本实例使用的webform框架 1、 想先试一试的大哥呢,整个复制先来先看看,详细介绍在后面。 protected void Button3_Click(object sender, EventArgs e) { //创建文件夹 string path= "G:\\
Excel
\\"; if (!Directory.Exists(path))//如果不存在就创建文件夹 {
导入
/
导出
Excel
--从
Excel
文件中,
导入
数据到SQL
数据库
中,很简单,直接用下面的语句:/*===================================================================*/--如果接受数据
导入
的表已经存在insert into 表 select * from OPENROWSET(MICROSOFT.JET.OLEDB.4.0,
Excel
5.0
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章