vc导入导出数据到excel表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc导入导出数据到excel表相关的知识,希望对你有一定的参考价值。

参考技术A 分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

我要在vc中实现将数据插入excel表,从表中查询数据,删除数据,更新数据,会的帮帮忙

解析:

我用的是excel2000

首先利用Visual C++ 6.0,建立一个MFC基于对话框的工程项目,共享DLL,Win32平台。工程名称ExcelTest。在主对话框中加入一个按钮,

ID IDC_EXCELTEST

Caption Test Excel

双击该按钮,增加成员函数void CExcelTestDlg::OnExceltest()。

在BOOL CExcelTestApp::InitInstance()中,dlg.DoModal();之前增加代码:

if (CoInitialize(NULL)!=0)



AfxMessageBox("初始化COM支持库失败!");

exit(1);



在return FALSE; 语句前,加入:

CoUninitialize();

选择Menu->View->ClassWizade,打开ClassWizade窗口,选择Add Class->From a type library,选择D:\Program Files\Microsoft Office\office\Excel9.OLB(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,分别为_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,头文件Excel9.h,源文件Excel9.cpp。

在ExcelTestDlg.cpp文件的头部,#include "ExcelTestDlg.h"语句之下,增加 :

#include "def.h"

#include "Excel9.h"

在void CExcelTestDlg::OnExceltest() 函数中增加如下代码:

void CExcelTestDlg::OnExceltest()



_Application ExcelApp;

Workbooks wbsMyBooks;

_Workbook wbMyBook;

Worksheets wssMysheets;

_Worksheet wsMysheet;

Range rgMyRge;

创建Excel 2000服务器(启动Excel)

if (!ExcelApp.CreateDispatch("Excel.Application",NULL))



AfxMessageBox("创建Excel服务失败!");

exit(1);



利用模板文件建立新文档

wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);

wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt")));

得到Worksheets

wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);

得到sheet1

wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);

得到全部Cells,此时,rgMyRge是cells的 ***

rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);

设置1行1列的单元的值

rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!"));

得到所有的列

rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true);

得到第一列

rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true);

设置列宽

rgMyRge.SetColumnWidth(_variant_t((long)200));

调用模板中预先存放的宏

ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,

vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,

vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,

vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,

vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);

打印预览

wbMyBook.SetSaved(true);

ExcelApp.SetVisible(true);

wbMyBook.PrintPreview(_variant_t(false));

释放对象

rgMyRge.ReleaseDispatch();

wsMysheet.ReleaseDispatch();

wssMysheets.ReleaseDispatch();

wbMyBook.ReleaseDispatch();

wbsMyBooks.ReleaseDispatch();

ExcelApp.ReleaseDispatch();

SQLyog查询数据后如何导到excel

数据库是mysql,用的是SQLyog界面操作,但是无法导出为.xsl文件,只能导出为.html,.xml,.csv文件.请有知道帮忙解答,非常感谢!...
我需要的是从数据库里导入到excle,thanks the same!...

参考技术A 概要
本文循序渐进地演示如何用不同的方法将数据从 Microsoft Excel 工作表导入到 Microsoft SQL Server 数据库。

技术说明
• SQL Server 链接服务器
• SQL Server 分布式查询
• ActiveX 数据对象 (ADO) 和 Microsoft OLE DB Provider for SQL Server
• ADO 和 Microsoft OLE DB Provider for Jet 4.0

要求
下面的列表列出了推荐使用的硬件、软件、网络架构以及所需的服务包: • Microsoft SQL Server 7.0 或 Microsoft SQL Server 2000 的可用实例
• Microsoft Visual Basic 6.0(针对使用 Visual Basic 的 ADO 示例)
本文的部分内容假定您熟悉下列主题: • 数据传输服务
• 链接服务器和分布式查询
• Visual Basic 中的 ADO 开发

示例
导入与追加
本文使用的示例 SQL 语句演示了“创建表”查询。该查询通过使用 SELECT...INTO...FROM 语法将 Excel 数据导入新的 SQL Server 表。如这些代码示例所示,在继续引用源对象和目标对象时,可以通过使用 INSERT INTO...SELECT...FROM 语法将这些语句转换成追加查询。

使用 DTS
可以使用 SQL Server 数据传输服务 (DTS) 导入向导将 Excel 数据导入 SQL Server 表。在逐步执行向导并选择 Excel 源表时,要记住附加美元符号 ($) 的 Excel 对象名称代表工作表(例如,Sheet1$),而没有美元符号的普通对象名称代表 Excel 指定的范围。

使用链接服务器
要简化查询,可以将 Excel 工作簿配置为 SQL Server 中的链接服务器。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
306397 (http://support.microsoft.com/kb/306397/) 如何结合 SQL Server 链接的服务器和分布式查询使用 Excel
下列代码将 Excel 链接服务器“EXCELLINK”上的 Customers 工作表数据导入新的名为 XLImport1 的 SQL Server 表: SELECT * INTO XLImport1 FROM EXCELLINK...[Customers$]
还可以通过按照以下方式使用 OPENQUERY 以全通过方式对源数据执行查询: SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,
'SELECT * FROM [Customers$]')
使用分布式查询
如果不想将对 Excel 工作簿的永久连接配置为链接服务器,可以通过使用 OPENDATASOURCE 或 OPENROWSET 函数为特定目的导入数据。下列代码示例也能将 Excel Customers 工作表数据导入新的 SQL Server 表: SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:testxltest.xls;Extended Properties=Excel 8.0')...[Customers$]

SELECT * INTO XLImport4 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:testxltest.xls', [Customers$])

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:testxltest.xls', 'SELECT * FROM [Customers$]')
使用 ADO 和 SQLOLEDB
当通过使用 Microsoft OLE DB for SQL Server (SQLOLEDB) 在 ADO 应用程序中连接到 SQL Server 时,可以使用与“使用分布式查询” 一节中相同的“分布式查询”语法将 Excel 数据导入 SQL Server。

下列 Visual Basic 6.0 代码示例要求添加对 ActiveX 数据对象 (ADO) 的项目引用。此代码示例还演示了如何在 SQLOLEDB 连接上使用 OPENDATASOURCE 和 OPENROWSET。 Dim cn As ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;Data Source=<server>;" & _
"Initial Catalog=<database>;User ID=<user>;Password=<password>"

'Import by using OPENDATASOURCE.
strSQL = "SELECT * INTO XLImport6 FROM " & _
"OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _
"'Data Source=C:testxltest.xls;" & _
"Extended Properties=Excel 8.0')...[Customers$]"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

'Import by using OPENROWSET and object name.
strSQL = "SELECT * INTO XLImport7 FROM " & _
"OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
"'Excel 8.0;Database=C:testxltest.xls', " & _
"[Customers$])"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

'Import by using OPENROWSET and SELECT query.
strSQL = "SELECT * INTO XLImport8 FROM " & _
"OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
"'Excel 8.0;Database=C:testxltest.xls', " & _
"'SELECT * FROM [Customers$]')"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

cn.Close
Set cn = Nothing
使用 ADO 和 Jet Provider
上一节中的示例使用 ADO 和 SQLOLEDB Provider 连接到从 Excel 到 SQL 导入的目标。也可以使用 OLE DB Provider for Jet 4.0 来连接到 Excel 源。

Jet 数据引擎可以通过使用具有三种不同格式的特殊语法来在 SQL 语句中引用外部数据库: • [Full path to Microsoft Access database].[Table Name]
• [ISAM Name;ISAM Connection String].[Table Name]
• [ODBC;ODBC Connection String].[Table Name]
本节使用第三种格式创建到目标 SQL Server 数据库的 ODBC 连接。可以使用 ODBC 数据源名称 (DSN) 或者 DSN-less 连接字符串: DSN:
[odbc;DSN=<DSN name>;UID=<user>;PWD=<password>]

DSN-less:
[odbc;Driver=SQL Server;Server=<server>;Database=<database>;
UID=<user>;PWD=<password>]
下列 Visual Basic 6.0 代码示例要求添加对 ADO 的项目引用。此代码示例演示了如何使用 Jet 4.0 Provider 通过 ADO 连接将 Excel 数据导入到 SQL Server。 Dim cn As ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:testxltestt.xls;" & _
"Extended Properties=Excel 8.0"

'Import by using Jet Provider.
strSQL = "SELECT * INTO [odbc;Driver=SQL Server;" & _
"Server=<server>;Database=<database>;" & _
"UID=<user>;PWD=<password>].XLImport9 " & _
"FROM [Customers$]"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

cn.Close
Set cn = Nothing
也可以通过使用该语法(Jet Provider 支持)将 Excel 数据导入其他 Microsoft Access 数据库、索引顺序存取方法 (ISAM)(“desktop”)数据库或 ODBC 数据库。

疑难解答
• 记住附加美元符号 ($) 的 Excel 对象名称代表工作表(例如:Sheet1$),而普通对象名称代表 Excel 指定的范围。
• 在某些环境中,特别是用表名称取代 SELECT 查询指派 EXCEL 源数据时,目标 SQL Server 表中的列会按照字母顺序重排。有关 Jet Provider 中存在的这一问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
299484 (http://support.microsoft.com/kb/299484/) PRB:使用 ADOX 检索 Access 表的列时,列按字母顺序排列
• 当 Jet Provider 确定一个 Excel 列包含了混合文本和数值数据时,Jet Provider 会选择“majority”数据类型并将不匹配的值以 NULL 形式返回。有关如何解决这个问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
194124 (http://support.microsoft.com/kb/194124/) PRB:使用 DAO OpenRecordset 时 Excel 返回值为 NULL

以上是关于vc导入导出数据到excel表的主要内容,如果未能解决你的问题,请参考以下文章

如何把SQLServer表数据导出为Excel文件

在mvc4中上传导入和导出excel表方法总结

hive使用教程(2)--数据导入导出、查询与排序

EasyExcel导入、导出Excel

c#数据表导出excel

如何把SQLServer表数据导出为Excel文件