只是简单的把功能实现了,在导出大量数据的时候有明显的延迟,也只能先这样了,那有时间去优化啊,估计在使用了多线程等优化手段后速度会有大的改善。把这段代码放在自己的空间里,以后也许用的着。
1、先在对话框中加入一个按钮,ID IDC_BUTTON_EXCEL Caption导出Excel。双击该按钮,增加成员函数void CMPIClientView::OnExcel()。
2、在BOOL MPIClient::InitInstance()中,dlg.DoModal();之前增加代码:
if (CoInitialize(NULL)!=0)
{
AfxMessageBox("初始化COM支持库失败!");
exit(1);
}
在return FALSE;语句前,加入:
CoUninitialize();
3、点View菜单中的ClassWizard(或按CTRL+W),选择Automation标签,点Add Class 并选择"From a type library"浏览并选择你希望自动化的对象库(例如,如果你自动化Microsoft Excel 2000,选择位于C:/Program Files/Microsoft Office/Office/Excel9.olb的Microsoft Excel 9.0对象库。如果你自动化Microsoft Excel 2002和Microsoft Office Excel 2003 ,对象库内含在Excel.exe中,Office 2002的Excel.exe默认位于C:/program
Files/Microsoft Office/Office10/Excel.exe, Office 2003的Excel.exe默认位于C:/program
Files/Microsoft Office/Office11/Excel.exe。选择合适的对象库后,点Open,在类确认列表中选择所有类(一般要用到_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range几个基本的类),点OK。提示:类确认对话框中的列表框里包含了Microsoft Excel类型库中的所有IDispatch接口(与类中一致)。在对话框下面可以看到命名为Excel8.cpp的执行文件,该文件包含了从COleDispatchDriver派生的封装类,头文件是Excel8.h(对于Excel 2002和Excel 2003,文件名为Excel.cpp和Excel.h)。
4、在ExcelTestDlg.cpp文件的头部,增加:
#include "comdef.h"
#include "Excel9.h"(或Excel8.h,Excel.h)
5、在void CMPIClientView::OnExcel()函数中增加如下代码:
int n = 2;
CStringexeId;
CStringexeName;
CStringexeType;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application ExcelApp;
Workbooks MPIBooks;
_Workbook MPIBook;
Worksheets MPISheets;
_Worksheet MPISheet;
Range MPIRange;
//创建Excel 2003服务器(启动Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("Create Excel service failure!");
return;
}
ExcelApp.SetVisible(false);
//利用模板文件建立新文档
MPIBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
MPIBook = MPIBooks.Add(covOptional);
//得到Worksheets
MPISheets.AttachDispatch(MPIBook.GetWorksheets(),true);
//得到sheet1
MPISheet.AttachDispatch(MPISheets.GetItem(_variant_t("sheet1")),true);
//得到全部Cells,此时,MPIRange是cells的集合
MPIRange.AttachDispatch(MPISheet.GetCells(),true);
MPIRange.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("工号")); MPIRange.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t("姓名")); MPIRange.SetItem(_variant_t((long)1),_variant_t((long)3),_variant_t("机型")); //设置列的宽度
MPIRange.SetColumnWidth(_variant_t((long)12));
while (n < i+2)
{
exeId = m_szDataList.GetItemText(n-2, 1);
exeName = m_szDataList.GetItemText(n-2, 2);
exeType = m_szDataList.GetItemText(n-2, 3);
MPIRange.SetItem(_variant_t((long)n),_variant_t((long)1),_variant_t(exeId));
MPIRange.SetItem(_variant_t((long)n),_variant_t((long)2),_variant_t(exeName)) ;
MPIRange.SetItem(_variant_t((long)n),_variant_t((long)3),_variant_t(exeType));
exeId = "";
exeName = "";
exeType = "";
n++;
}
ExcelApp.SetVisible(true);
ExcelApp.Quit();
MPIRange.ReleaseDispatch();
MPISheet.ReleaseDispatch();
MPISheets.ReleaseDispatch();
MPIBook.ReleaseDispatch();
MPIBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
Java实现Excel数据导入导出的研究与应用 王晶晶 北京邮电大学网络教育学院(100088) E-mail:bolalisi_double@https://www.sodocs.net/doc/8f18308068.html, 摘要:Excel能够通过功能强大的工具将杂乱的数据组织成有用的信息,然后分析、交流和共享所得到的结果。很多系统由于存在着大量需要处理的数据,Excel本身强大的功能使得它成为处理分析这些数据首选的工具。随着Java语言成为越来越多系统的开发语言,利用Java进行Excel的数据导入导出在很多系统中都发挥着重要的作用,本文主要介绍了Jxl API的主要功能,并结合实例探讨了利用Jxl API操作Excel数据的导入和导出。 关键字:Java;Excel; Jxl API;数据导入导出 中图分类号:TP312文献标识码:A 1. 引言 MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。在远程网络教学系统中,利用Excel表格统计学生的作业考试情况信息,便于老师了解学生的学习情况,分析教学效果,制定教学计划。所以,用Java操作Excel表格,导出相关的信息对于远程网络教育系统有着的很重要的意义。 在开源世界中,有两套比较有影响的API提供Excel数据导入导出的功能,一个是POI,一个是jExcelAPI。本文结合基于J2EE开发的多媒体教学系统中提供的将学生作业信息导出到Excel表格中的实例,详细阐述了利用JAVA开发的jExcelAPI操作excel的方法。 2. Jxl 简介 2.1 Java语言简介 Java语言具有面向对象、与平台无关、安全、稳定和多线程等优良特性,是目前软件设计中极为强大的编程语言[1]。它具有以下一些特点[2]:简单,面向对象,分布式,解释执行,鲁棒,安全,体系结构中立,可移植,高性能,多线程以及动态性。 2.2什么是Jxl Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该 API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、 Servlet来调用API实现对Excel数据表的访问。 Jxl发布的稳定版本是V2.0,提供以下功能: 从Excel 95、97、2000等格式的文件中读取数据[3]; 读取Excel公式(可以读取Excel 97以后的公式)[3];
实验环境:WIN XP,MS Office Excel2007,Sql Server2008 准备数据:Excel文档:D:\test\重复出修率.xlsx 方法一: 第一步:打开SSMS: 【开始】→【所有程序】→【Microsoft Sql Server2008】→【Sql Server Management Studio】
第二步:连接数据库: 在’对象资源管理器’中点击【连接】→【数据库引擎】登陆服务器 (P.S:如果没有看到’对象资源管理器’,点击左上角的【视图】→【对象管理器】) 第三步:登陆成功后,右击你要导入数据的数据库名,我这里数据库名是’TEST’ 右击【TEST】→【任务】→【导入数据】
这时候会出现一个向导:点击【下一步】 在弹出的窗口中,【数据源】选择:Microsoft Excel; 【Excel文件路径】就选择你本地电脑存放Excel文档的路径,我这里是D:\test\重复出修率.xlsx 【Excel版本】选择Excel2007(可以根据你office的版本,选择其他如Excel2003等等。)选中【首行包含列名称】框,最后点击【下一步】 “首行包含列名称”是指Excel中的首行数据插入数据库后将作为新建表的列名.
在弹出窗口中,【目标】可以采取默认的,【服务器名称】也是一样可以选择身份验证,最后选择你要插入数据到哪个数据库中。 如我这里选的是’TEST’,选好后点击【下一步】
如果就把Excel数据插入一个新表,就选择【复制一个或多个表或视图的数据】 如果想把Excel数据插入到已存在的一张表中,则选择下面的【编写查询以指定要传输的数据】 我这里是选择上面一个,然后点击【下一步】 接着会弹出Excel表中的sheet表名字,如果你没有修改过sheet表名字,则可能显示的是’shee1$’,’shee2$’,’shee3$’等等. 然后你选中你想要导入的哪张表的数据,我这里导入的是【’aug$’】 选中后,右边的【目标】栏位中会出现内容, dbo是指数据库的架构名,aug$只是新建的表名,如果你想修改表明,双击就可以表明进入编辑状态就可以修改了。我这里修改的表名称为:aug_info
Private Sub cmdSwatch_Click() Dim xls As excel.Application Dim xlbook As excel.Workbook 'On Error GoTo exlError Dim i As Integer If Dir(Text1.Text) <> "" Then '此目录下如有同名文件给出提示,并作相应处理 If MsgBox("文件已存在,是否覆盖!", vbYesNo + vbQuestion, "另存为工程造价文件") = vbNo Then Exit Sub Else Kill (Text1.Text) '删除文件 End If End If '************打开工作表*************** Set xls = New excel.Application xls.Visible = True Set xlbook = xls.Workbooks.Add '********************************* For i = 0 To 14 If Check2(i).Value = vbChecked Then Select Case i Case 8 ToExcelJDanJiaSum.ToExcelJDanJiaSum xlbook, xls Case 9 ToExcelADanJiaSum.ToExcelADanJiaSum xlbook, xls Case 10 ToExcelCailiao.ToExcelCailiao xlbook, xls
Case 11 ToExcelTsf.ToExcelTsf xlbook, xls Case 12 ToExcelZgcl.ToExcelZgcl xlbook, xls End Select End If Next For i = 0 To 6 If Check3(i).Value = vbChecked Then Select Case i Case 0 ToExcelMan.ToExcelMan xlbook, xls Case 1 ToExcelFSD_CL.ToExcelFSD_CL xlbook, xls Case 2 ToExcelHNT.ToExcelHNT xlbook, xls Case 3 ToExcelZsf.ToExcelZsf xlbook, xls Case 4 ToExcelJingChang.ToExcelJingChang xlbook, xls Case 5 ToExcelJDanJia.ToExcelJDanJia xlbook, xls Case 6 ToExcelADanJia.ToExcelADanJia xlbook, xls End Select End If Next xlbook.SaveAs Text1.Text '保存EXCEL文件
Excel模板数据导入教程 Excel模板数据导入教程 Excel导入模板中的数据既可以直接在我们提供的模板文件中录入,列标题中有红色“(必填)”文字的列必须要填写,其它列根据实际需求可以不填写,换算比率、销售价格、库存数量、成本价这些数字列如果要导入的话,一定是纯数字格式,必须要填写而且不能包括任何汉字或字母。 库存数量与成本价必须是以基本计量单位核算录入,也就是以最小计量单位核算录入。 如果从管家婆、速达等进销存软件中导出到Excel文件,一定要修改导出的Excel文件格式,否则肯定不能正常识别和导入,修改的要求如下: 1、Excel导入模板文件扩展名必须为xls,如果为其它扩展名,必须双击打开模板文件,然后另存为“Excel97-2003工作簿(*.xls)”格式的文件; 2、窗口左下角的工作薄名称必须为“Sheet1”,管家婆或速达导出来的工作薄名称一般为其它名称,必须要修改为Sheet1,请见以下截图; 3、第一行必须为列名,第二行开始必须为要导入的正式数据,请见以下截图;
附上一张标准的导入模板数据截图 本教程只演示怎么导入在我们提供的Excel导入模板中录入的数据,如果从管家婆或速达等进销存软件导出来的数据,导入方式大同小异,只是列名或列的数量不一致而已; 在导入之前一定要关闭要导入的Excel模板文件,否则因为独占模式导致导入时无法识别模板文件中的数据。 产品资料导入 产品资料模板中包括“产品资料基础信息、销售价格、库存记录”3部分内容,需要将同一个产品资料模板文件分3步分别导入,如果有辅助计量单位的销售价格也需要导入,那么需要分4步分别导入。 在导入的模板中如果包括软件中已存在的产品资料记录,一定要在导入窗口将 下拉框选择,这样就不会将相同的记录重复导入到软件中。 第一步:既可以在软件初次使用向导窗口中点击“产品资料导入”按钮,也可以在“基础数据----产品资料”列表窗口点击“Excel导入”菜单,弹出产品资料导入窗口,先选择要导入的Excel模板文件,然后根据要导入的列,按照以下截图设置要导入的列,在第一步中只能导入产品资料的基础数据,销售价格和库存记录在以下步骤中导入。
用VB操作excel方法汇总 Private Sub Command3_Click() Dim i As Long Dim j As Long Dim objExl As Excel.Application '声明对象变量 Me.MousePointer = 11 '改变鼠标样式 Set objExl = New Excel.Application '初始化对象变量 objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1 objExl.Workbooks.Add '增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name = "book1" '修改工作薄名称 objExl.Sheets.Add , objExl.Sheets("book1") '增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book2" objExl.Sheets.Add , objExl.Sheets("book2") '增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book3" objExl.Sheets("book1").Select '选中工作薄
Option Explicit Sub 生成标签() Dim R As Long Dim i As Long Dim sht As Worksheet Dim shtFrom As Worksheet Dim shtMB As Worksheet Dim toBK As Excel.Workbook Dim FoundMB As Boolean Dim FoundData As Boolean For i = 1 To ThisWorkbook.Worksheets.Count If ThisWorkbook.Worksheets(i).Name = "模板" Then FoundMB = True If ThisWorkbook.Worksheets(i).Name = "数据" Then FoundData = True Next If FoundMB = False Or FoundData = False Then MsgBox "找不到[模板]或[数据]工作表" GoTo Exit_Sub End If Set shtMB = ThisWorkbook.Worksheets("模板") Set shtFrom = ThisWorkbook.Worksheets("数据") R = shtFrom.Range("A65536").End(xlUp).Row Application.ScreenUpdating = False Set toBK = Application.Workbooks.Add For i = 2 To R Step 3 shtMB.Copy , toBK.Worksheets(toBK.Worksheets.Count) Set sht = toBK.Worksheets(toBK.Worksheets.Count) With sht .Range("c1") = "'" & shtFrom.Cells(i, 1) .Range("C3") = shtFrom.Cells(i, 2) .Range("g5") = shtFrom.Cells(i, 3) .Range("c19") = "'" & shtFrom.Cells(i + 1, 1) .Range("C21") = shtFrom.Cells(i + 1, 2) .Range("g23") = shtFrom.Cells(i + 1, 3) .Range("c37") = "'" & shtFrom.Cells(i + 2, 1) .Range("C39") = shtFrom.Cells(i + 2, 2) .Range("g41") = shtFrom.Cells(i + 2, 3)
EXCEL工作表数据导入到DBF的方法 操作惯了EXCEL的同行,一定觉得使用VF6.0打开DATA数据库输入数据很麻烦。以输入新生入学花名册为例,EXCEL可以实现快速复制、粘贴、排序、筛选、统计等多项功能。而DBF只能逐一追加新记录。那么,可否先用EXCEL输机,再把数据导入到DBF呢? 答案是:可以! 本人实践操作过程如下: 1、现有EXCEL表,命名为“HESHI2010XS.XSL”,如下图1 图1 2、将此文件另存为“HESHI2010”,保存类型为:“Microsoft Excel 97- Excel 2003 & 5.0/95工作簿。如图2;
图2 3、运行Microsoft Visual Foxpro。点“文件”,出现“导入”等下拉窗口,如图3;图 图3 4、点“导入”,出现图4 图4 5、点“来源于”选框后边的“…”按纽,找到“HESHI2010.XSL”,“工作表”选框设为“SHEET1”或者是新生数据所在的工作表。如图5:
图5 6、点“确定”,即生成“heshi2010.DBF”,找到并打开该文件,就算搞定!如图6 图6 几点补充: 1、为什么上面第二步要“将此文件另存为‘HESHI2010’,保存类型为:‘Microsoft Excel 97- Excel 2003 & 5.0/95工作簿。’”? 因为:VF6.0只能将Microsoft Excel 97- Excel 2003 & 5.0/95工作簿导入!当然,也可以导入Microsoft Excel 5.0/95工作簿。在对Excel文件进行保存时,一定先点“另存为”,在出现的窗口中,点“保存类型”即可选择以上两种形式的工作簿。
'************************************************************************* '** '** VB将数据导出到EXCEL,没有安装EXCEL的一样也可以导出. '** '** 调用方式: s_Export2Excel(Ado.Recordset) 或s_Export2Excel(Rds.RecordSet) '** 支持Rds 与Ado 的记录导出 '** '************************************************************************* '得到所有数据类型,有些数据类型EXCEL不支持,已经替换掉 Public Function f_FieldType$(ByVal sType&) Dim iRe$ Select Case sType Case 2, 3, 20 iRe = "int " Case 5 iRe = "float " Case 6 iRe = "money " Case 131 iRe = "numeric " Case 4 iRe = "real " Case 128 iRe = "binary " Case 204 iRe = "varbinary " Case 11 iRe = "bit " Case 129, 130 iRe = "char " Case 17, 72, 131, 200, 202, 204 iRe = "varchar " Case 201, 203 iRe = "text " Case 7, 135 iRe = "datetime " Case 205 iRe = "image " Case 128 iRe = "timestamp " End Select f_FieldType = iRe
vb导出数据到Excel Public Function ExporToExcel(strOpen As String,cn As ADODB.Connection) '入参为SQL查询语句,cn为当前活动的连接 '********************************************************* '* 名称:ExporToExcel '* 功能:导出数据到EXCEL '* 用法:ExporToExcel(sql查询字符串) '********************************************************* Dim Rs_Data As New ADODB.Recordset Dim Irowcount As Integer Dim Icolcount As Integer Dim FILENAME As String Dim xlApp As New Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlQuery As Excel.QueryT able With Rs_Data If .State = adStateOpen Then .Close End If .ActiveConnection = Cn .CursorLocation = adUseClient .CursorType = adOpenStatic .LockType = adLockReadOnly .Source = strOpen .Open End With With Rs_Data If .RecordCount < 1 Then MsgBox ("没有记录!") Exit Function End If '记录总数 Irowcount = .RecordCount '字段总数 Icolcount = .Fields.Count End With Set xlApp = CreateObject("Excel.Application") Set xlBook = Nothing Set xlSheet = Nothing
学习使人进步 心之所向,所向披靡 EXCEL表格数据导入系统操作说明: Excel表格的修改: (1)将原Excel表格复制一份,保证数据的安全 (2)确定需要保留的字段 (3)将确定不需要的字段删除(需谨慎操作) (4)将Excel表格中的空白单元格全部用0填补 (5)如发现不常用的生僻字,在光盘中找到special.txt文件,放入软件安装路径如:C:\Program Files\MLGL\sinfarch文件夹下,同时将此生僻字添加进special.txt文件,保存,然后再进行导入操作 (6)将Excel表格的单元格格式设置成文本格式(选中格式→单元格) 注意:尽量单独选中列操作,保证每一列都被设置成文本格式,设置完成后再检查一遍(7)在光盘中找到mapping.xml文件,放入软件安装路径如:C:\Program Files\MLGL\sinfarch文件夹下,右击选择打开方式为记事本格式,进行编辑; 表名编辑: 在编辑的时候,例如