delphi批量导入数据
从Excel中导入数据到Access中:
procedure TForm5.Button3Click(Sender: TObject); //excel导入
var
EXLfile:string;
sheet,XLApp,workbook : variant;
iRow,MaxRow:integer;
begin
if opendialog1.Execute then
begin
EXLfile:=opendialog1.FileName;
screen.Cursor:=crHourGlass;
try
//创建对象
XLApp:=createOleObject('Excel.Application');
XLApp.displayAlerts:=false; //运行宏时是否显示警告和消息
XLApp.ScreenUpdating:=false; //屏幕更新功能,提高速度;
XLApp.WorkBooks.Add(EXLfile);
workbook := XLApp.workbooks[1];
sheet:=workbook.worksheets[1];
//sheet:=XLApp.WorkBooks[1].worksheets[1];
//得到最大行数maxRow
XLApp.ActiveCell.SpecialCells(xlLastCell).Select;
maxRow:=XLApp.ActiveCell.Row; //当前行数
//最大行数
//写数据到access库
with Dm1.aq_temp do
begin
Close;
SQL.Clear ;
SQL.Add('select * from peo ');
open ;
for iRow:=1 to MaxRow do // 循环次数为excel最大行数字-1,因为excel的第1行为ID name表头。
begin
Edit;
Append;
fieldByName('P_No').asString:=sheet.cells[iRow,1];
fieldByName('P_Name').asString:=sheet.cells[iRow,2]; //导入
post;
end;
end;
finally
if not VarIsEmpty(XLApp) then
begin //释放对象
XLApp.displayAlerts:=false;
XLApp.ScreenUpdating:=true; //结束后,ScreenUpdating 设回到True
XLApp.quit;
end;
screen.Cursor:=crDefault;
end;
end;
end;
现在sql里有book的表,里面有
id 书名价格
id bookname price
1 社会与科学 18
2 delphi入门 25
3 百科 30
在delphi里现在希望先把数据从excel导入到dbgrid中,然后点“批量插入”时,把刚才所有存到导入的dbgrid的数据插入到sql中,问一下大家怎么才能做到,有二个关键代码
1.button1:“从excel导入到dbgrid中”的关键代码
2.button2:"批量插入dbgrid数据到数据库中"的关键代码
如果利用dbgrid其实就是利用数据集来操作
从excel读数据,然后利用
adoquery.append;
adoquery.fieldbyname('').value := 读的值
....
...
然后,对dbgrid进行编辑.
最后adoquery.post;就达到了批量提交了.
但这里要用事务来控制.
读Excel代码:利用一个结构体,供你参考
var
RangeMatrix: Variant;
OpenDialog1: TOpenDialog;
iRE: integer;
IN_TYPE,vStockName: String;
sStockName,sCompany: String;
i: Integer;
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
ASN2_NEW: PASN2_NEW;
begin
OpenDialog1:=TOpenDialog.Create(nil);
try
OpenDialog1.FileName:='*.csv;*.xls';
if not OpenDialog1.Execute then
begin
Result := false;
exit;
end;
MsExcel := CreateOleObject('Excel.Application');
MsExcelWorkBook := msExcel.Workbooks.Open(OpenDialog1.FileName);
MsExcelWorkSheet := msExcel.Worksheets.Item[1];
except
Result := false;
end;
//开始从EXCEL文件读取相关的信息
try
Application.ProcessMessages;
for i := 1 to MsExcelWorkSheet.Rows.Count do
begin
New(FASN2);
FASN2.In_Stock_No := trim(MsExcelWorkSheet.Range['B1'].Value);
FASN2.MAIN_FLG := trim(MsExcelWorkSheet.Range['A' + IntToStr(i)].Value); FAsn2List.Add(FASN2);
//在这里可以调用adoquery.append代码
end;
Result := true;
finally
MsExcel.WorkBooks.Close;
end;
MsExcel.Quit;
OpenDialog1.Free;
end;
为了更清淅的表达我的意思,上传一张图
在delphi里现在希望先把数据从excel导入到dbgrid中,然后点“批量插入”时,把刚才所有存到导入的dbgrid的数据插入到sql中,问一下大家怎么才能做到,有二个关键代码
1.button1:“从excel导入到dbgrid中”的关键代码
2.button2:"批量插入dbgrid数据到数据库中"的关键代码
//excel 读到 dbgrid
var
str:string;
begin
str:='select * from opendatasource(''microsoft.jet.oledb.4.0'',''da ta source="文件路径";user id=admin;password=;extened properties=excel 5.0'')...[sheet1$] ';
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add(str);
adoquery.active:=true;
adoquery.open;
end;
//dbgrid 导入数据表
var
str:string;
begin
str:='select * into t from opendatasource(''microsoft.jet.oledb.4. 0'',''data source="文件路径";user id=admin;password=;extened properties=excel 5.0'')...[sheet1$] ';
with adoquery do
begin
close;
sql.clear;
sql.add(str);
execsql;
if rowsaffected>0then
showmessage('插入成功')
else
showmessage(插入失败);
end;
end;
致:sz9214e
感谢你的回帖,其实这二个帖有一部分是重复的,就是把dbgrid数据批量插入到sql中,不同是的
这个帖重点:
把数据从excel导到dbgrid中,再把dbgrid数据批量插入到sql中
下一个帖的重点是:
先在DBGrid1中存放N条记录,但不要即时存入数据库中,全部录入完成时再把dbgrid 数据批量插入到sql中
上周因受了点伤没有上班,今天才开始上班,再次感谢你的回帖,能否把源程序发给我,这样我觉得快些,谢谢!
我的email是:ansameye@https://www.doczj.com/doc/b411630441.html,
解决问题的代码:
procedure TForm1.btnClick(Sender: TObject);
begin
OpenDialog1.Title := '请选择正确的excel文件';
OpenDialog1.Filter := 'Excel(*.xls)|*.xls';
if OpenDialog1.Execute then
edit1.Text := OpenDialog1.FileName;
end;
procedure TForm1.btninClick(Sender: TObject);
const
BeginRow = 2; BeginCol = 1;
var
Excel: OleVariant;
iRow,iCol : integer;
xlsFilename: string;
begin
if (trim(edit1.Text) = '') then
begin
MessageBox(GetActiveWindow(), 请选择正确的excel路径', MB_OK +
MB_ICONW ARNING);
exit;
end;
xlsFilename := trim(edit1.Text);
try
Excel := CreateOLEObject('Excel.Application');
except
Application.MessageBox('excel没有安装', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
end;
Excel.Visible := false;
Excel.WorkBooks.Open(xlsFilename);
try
iRow := BeginRow;
iCol := BeginCol;
while trim(Excel.WorkSheets[1].Cells[iRow,iCol].value) <> '' do begin
with ADOQuery1 do begin
Append;
Fields[0].AsString := trim(Excel.WorkSheets[1].Cells[iRow,iCol].value);
Fields[1].AsString := trim(Excel.WorkSheets[1].Cells[iRow,iCol+1].value);
Fields[2].Asstring := trim(Excel.WorkSheets[1].Cells[iRow,iCol+2].value);
iRow := iRow + 1;
end;
end;
Excel.Quit;
ADOQuery1.UpdateStatus ;
except
Application.MessageBox('导入数据出错', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Excel.Quit;
end;
MessageBox(GetActiveWindow(), '数据导入成功', '提示信息', MB_OK +
MB_ICONW ARNING);
end;
如何在DELPHI中将EXCEL中的数据导入到SQL数据库
var
s1:string;
begin
screen.Cursor:=crSQLWait;
s1:='insert into table_bus '+
'
(BS_NO,BS_TYPE,bs_whos,bs_mode,bs_seat,bs_soalseat,bs_drseat,bs_oilty pe,bs_buycard,bs_unit,BS_BDATE,bs_edate) '+
' SELECT 车号,dbo.uf_GetFullNameCode(车型名
称),dbo.uf_GetFullNameCode(所属单位),dbo.uf_GetFullNameCode(厂牌型号),核定座位,售票座位,驾驶室前排座位,dbo.uf_GetFullNameCode(燃料名称),购置证号,本外单位,启用日期,dbo.uf_ConvertNullDate(终止时间) '+
' FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data
Source="'+trim(LabeledEdit1.text)+'";Extended Properties=Excel
8.0;Persist Security Info=False'')...[Sheet1$] '+
' where 车号 not in(select bs_no from table_bus) ';
try
DataModule1.ADOConnection1.Execute(s1);
finally
screen.Cursor:=crArrow;
end;
end;
EXCEL是可以当成一种数据源来处理的。 Str :=
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + 文件路径 +
';Extended Properties=Excel 8.0;Persist Security Info=False';
然后每列相当于一字段
熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。在Transact-SQL 语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQL SERVER、ACCESS、EXCEL数据转换,详细说明如下:
一、SQL SERVER 和ACCESS的数据导入导出
常规的数据导入导出:
使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤: ○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation
○2Services(数据转换服务),然后选择 czdImport Data(导入数据)。
○3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
○4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。
○5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
○6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。
Transact-SQL语句进行导入导出:
1.在SQL SERVER里查询access数据:
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/DB.mdb";User ID=Admin;Password=')...表名
2.将access导入SQL server
在SQL SERVER 里运行:
SELECT *
INTO newtable
FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/DB.mdb";User ID=Admin;Password=' )...表名
3.将SQL SERVER表里的数据插入到Access表中
在SQL SERVER 里运行:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source=" c:/DB.mdb";User ID=Admin;Password=')...表名
(列名1,列名2)
select 列名1,列名2 from sql表
实例:
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:/db.mdb';'admin';'', Test)
select id,name from Test
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:/trade.mdb';
'admin'; '', 表名)
SELECT *
FROM sqltablename
二、SQL SERVER 和EXCEL的数据导入导出
1、在SQL SERVER里查询Excel数据:
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT *
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/Finance/account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
2、将Excel的数据导入SQL server :
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/Finance/account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
3、将SQL SERVER中查询到的数据导成一个Excel文件
T-SQL代码:
EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:/Temp.xls -c -q
-S"servername" -U"sa" -P""'
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式
实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out
c:/temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:/ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中应用ADO导出EXCEL文件代码:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL
Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:/DT.xls -c -Sservername -Usa -Ppassword'"
4、在SQL SERVER里往Excel插入数据:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/Temp.xls";User ID=Admin;Password=;Extended
properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)
T-SQL代码:
INSERT INTO
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
'Extended Properties=Excel 8.0;Data
source=C:/training/inventur.xls')...[Filiale1$]
(bestand, produkt) VALUES (20, 'Test')
总结:利用以上语句,我们可以方便地将SQL SERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!
procedure TForm1.Button3Click(Sender: TObject);
var
oe:variant;
n1,str:string;
j:integer;
begin
if opendialog1.Execute then
opendialog1.DefaultExt:='xls';
str:=opendialog1.FileName;
oe:=CreateOleObject('Excel.Application');
oe.visible:=true;
oe.workbooks.open(str);
j:=2; //假定标题在第一行
try
with adoQuery2 do
begin
n1:='select * from ##tbl_cardgrant1 ';
close;
sql.Clear;
sql.Add(n1);
while oe.worksheets['查询结果1'].cells[j,1].text<>'' do
begin
for i:=1 to adoquery1.fieldcount do
Parameters.Items[i-1].Value:=oe.worksheets['查询结果
1'].cells[j,1].text;
memo2.Text:=n1;
execsql;
j:=j+1;
end;
oe.visible:=false;
showmessage('导入完毕');
end;
except
oe.visible:=false;
showmessage('数据库错误或有重复编号,请检查');
end;
end;
Excel文件记录导入到数据库中
前段时间由于工作需要,设计了一个基于InfoPath+SQL的查询系统,设计完成后,突然发现查询系统所需要的原始数据都是存放在Excel文档,如果将每条记录重新输入到SQL中,那过程将非常繁琐,通过在网络查询得到二种方法,但过程还是不太方便。现将以下几种方法汇总以下:
一、在程序中,用https://www.doczj.com/doc/b411630441.html,。代码如下:
//连接串
string strConn="Provider=Microsoft.Jet.OLEDB.4.0;Extended PropertIEs=E xcel8.0;Data Source="+[EXCEL文件,含路径]+";";
OleDbConnection conn=new OleDbConnection(strConn);
conn.Open;
DataTable dtSchema=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object{null,null,null,"TABLE"});
DataSet ds=new DataSet;
//一个EXCEL文件可能有多个工作表,遍历之
foreach(DataRow dr in dtSchema.Rows)
{
string table=dr["TABLE_NAME"].ToString;
string strExcel="SELECT*FROM["+table+"]";
ds.Tables.Add(table);
OleDbDataAdapter myCommand=new OleDbDataAdapter(strExcel,conn);
myCommand.Fill(ds,table);
}
conn.Close;
这样,读取出来的数据就藏在DataSet里了。
采用这种方式,数据库所在机器不必装有EXCEL。
二、在查询分析器里,直接写SQL语句:
如果是导入数据到现有表,则采用
INSERT INTO 表SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
的形式
如果是导入数据并新增表,则采用
SELECT * INTO 表FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
的形式。
以上语句是将EXCEL文件里SHEET1工作表中所有的列都读进来,如果只想导部分列,可以INSERT INTO 表(a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET('MICROSO FT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
其实可以将OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)当成一个表,例如我就写过这样一个句子:
INSERT INTO eval_channel_employee(channel,employee_id)
SELECT CASE a.渠道WHEN 'DIY' THEN 1 WHEN 'RDC' THEN 0 WHEN 'KCM' THEN 2 ELSE 3 END
,b.id FROM
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\temp\name.xls',sheet1$) AS a,pers_em ployee b
WHERE a.员工编码=b.code
不管是哪种方式,哪种途径,系统都会默认将第一行上的内容作为字段名。
这二种方式虽然非常好,但操作过程不太方便,经过测试发现在SQL2005中直接可以实现导入功能。操作过程如下:
第一步:登录到SQL Server Management Studio,
第二步:在“对象资源管理器”中右键单击“管理”,在弹出列表中单击“导入数据”
第三步:在“导入向导”对话框中单击“下一步”,进入到“选择数据源”对话框,在“数据源”列表中选择“Microsoft Excel ”,同时选择相应的Excel 文档,完成后单击“下一步”(一定要勾选该对话框中的“首行包含列名称”,因此它是将Excel文档中的列标题为数据库表中的列项标题)第四步:指定目标数据库服务,依次单击“下一步”。。。。至到“完成”
第五步:重新打到SQL Server Management Studio,进入到导入的数据库表,可以发现所导入的Excel文档数据。
效率最高的Excel数据导入
本文目录:
(一)背景
(二)数据库数据导入到Excel的方法比较
(三)SSIS的简介
(四)数据库中存储过程示例(SSIS应用需要)
(五)Excel模板的制作(这步这么简单,稍微介绍一下)
(六)SSIS操作过程(生成Package,用来调用)(下一篇随笔将详细讲解制作Pac kage包的过程,图片太多,篇幅过长,因此本文将直接采用生成的Package包进行应用)(七)C#中如何调用SSIS创建的Package和Excel模板(可以自己编写逻辑代码进行重复利用),用来生成Excel数据
(八)总结
(一)背景
如何将数据库中的数据导入到EXCEL文件中,我们经常会碰到。本文将比较常用的几种方法,并且将详细讲解基于SSIS的用法。笔者认为,基于SSIS的方法,对于海量数据来说,应该是效率最好的一种方法。个人认为,这是一种值得推荐的方法,因此,本人决定将本人所知道的、以及自己总结的完整的写出来,一是提高一下自己的写作以及表达能力,二是让更多的读者能够在具体的应用中如何解决将海量数据导入到Excel中的效率问题。
(二)方法的比较
方案一:SSIS(SQL Server数据集成服务),追求效率,Package制作过程复杂一点(容易出错)。
方案二:采用COM.Excel组件。一般,对于操作能够基本满足,但对于数据量大时可能会慢点。下面的代码,本人稍微修改了下,如下所示:该方法主要是对单元格一个一个的循环写入,基本方法为 excel.WriteValue(ref vt, ref cf, ref ca, ref chl, ref rowInde x, ref colIndex, ref str, ref cellformat)。当数据量大时,肯定效率还是有影响的。
方案三:采用Excel组件。一般,对于操作能够基本满足,但对于数据量大时可能会慢点。下面的代码,本人在原有基础上稍微修改了下,如下所示:
1public string OutputExceles(string strTitle, string FilePath, string typeName, System.Data.Data Table[] dtList, string[] smallTitleList)
2 {
3 beforeTime = DateTime.Now;
4 Excel.Application excel;
5 Excel._Workbook xBk;
6 Excel._Worksheet xSt;
7int rowIndex = 1;
8int colIndex = 1;
9 excel = new Excel.ApplicationClass();
10 xBk = excel.Workbooks.Add(true);
11 xSt = (Excel._Worksheet)xBk.ActiveSheet;
12int add=0;
13foreach (System.Data.DataTable dt in dtList)
14 {
15 colIndex = 1;
16//取得整个报表的标题
17 excel.Cells[rowIndex , 1] = smallTitle[add];
18 add++;
19////设置整个报表的标题格式
20 xSt.get_Range(excel.Cells[rowIndex, 1], excel.Cells[rowIndex , dt.Columns.Count]). Font.Bold = true;
21 xSt.get_Range(excel.Cells[rowIndex, 1], excel.Cells[rowIndex , dt.Columns.Count]). Font.Size = 22;
22////设置整个报表的标题为跨列居中
23 xSt.get_Range(excel.Cells[rowIndex , 1], excel.Cells[rowIndex , dt.Columns.Count]). Select();
24 xSt.get_Range(excel.Cells[rowIndex , 1], excel.Cells[rowIndex, dt.Columns.Count]). HorizontalAlignment = Excel.XlHAlign.xlHAlignCenterAcrossSelection;
25 rowIndex++;
26foreach (DataColumn col in dt.Columns)
27 {
28 excel.Cells[rowIndex, colIndex] = col.ColumnName;
29//设置标题格式为居中对齐
30 xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]). Font.Bold = true;
31 xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]). HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
32 xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]). Select();
33 xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]). Interior.ColorIndex = titleColorindex;
34 colIndex++;
35 }
36//取得表格中的数据
37foreach (DataRow row in dt.Rows)
38 {
39 rowIndex++;
40 colIndex = 1;
41foreach (DataColumn col in dt.Columns)
42 {
43if (col.DataType == System.Type.GetType("System.DateTime"))
44 {
45if (!string.IsNullOrEmpty(row[col.ColumnName].ToString()))
46 {
47 excel.Cells[rowIndex, colIndex] = (Convert.ToDateTime(row[col.Column Name].ToString())).ToString("yyyy-MM-dd");
48 xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colI ndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter; }
49 }
50else if (col.DataType == System.Type.GetType("System.String"))
51 {
52 excel.Cells[rowIndex, colIndex] = "'" + row[col.ColumnName].ToString();
53 xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colInd ex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;r; }
54else
55 {
56 excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
57 xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colInd ex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter; }
58 colIndex++;
59 }
60 }
61 rowIndex ++;
62 }
63 afterTime = DateTime.Now;
64 https://www.doczj.com/doc/b411630441.html, = strTitle;
65string filename = typeName + DateTime.Now.ToString("yyyyMMdd") + ".xls";
66// excel.Save(FilePath+filename);
67 excel.ActiveWorkbook.SaveCopyAs(FilePath + filename);
68#region结束Excel进程
69 xBk.Close(null, null, null);
70 excel.Workbooks.Close();
71 excel.Quit();
72#endregion
73return filename;
74 }
方法四:采用DataGrid,GridView自带的属性。如下:
(三)SSIS的简介
SQL Server 2005 提供的一个集成化的商业智能开发平台,主要包括:
*SQL Server Analysis Services(SQL Server数据分析服务,简称SSAS)
*SQL Server Reporting Services(SQL Server报表服务,简称SSRS)
*SQL Server Integration Services(SQL Server数据集成服务,简称SSIS)
SQL Server 2005 Integration Services (SSIS) 提供一系列支持业务应用程序
开发的内置任务、容器、转换和数据适配器。可以创建SSIS 解决方案来使用ETL 和商业智能解决复杂的业务问题,管理SQL Server 数据库以及在SQL Server 实例之间复制SQL Server 对象。
(四)数据库中存储过程示例(SSIS应用过程中需要的,最好拿个本子把需要的内容记下)
在SQL SERVER 2005中,以SSISDataBase数据库作为应用,仅包括2张表City,
Province.(主要是为了简单,便于讲解)
其中存储过程如下:
ALTER PROCEDURE [dbo].[ProvinceSelectedCityInfo]
(
@provinceId int=0
)
as
begin
select P.EName as省份拼音,https://www.doczj.com/doc/b411630441.html,ame as省份名,https://www.doczj.com/doc/b411630441.html,ame as城市名 from City C left join Pro vince P
on C.ProvinceId = P.ProvinceId
where C.ProvinceId =@provinceId and @provinceId is not null or @provinceId is null or @pro
vinceId=0
end
其中,在这一步中我们必须要记住相关的内容,如上标识(红色);为什么这么做?主要是在制作SSIS包的时候很容易混淆,建议拿个本子把需要的内容写好。
(五)Excel模板的制作(这步这么简单,稍微介绍一下)
因为SSIS中列映射对应的是Excel的标题,与数据是一对一的关系。先不管这么多,看下我们的模板,如下图所示。我们应该能够发现,省份拼音、省份名、城市名,还有Pr ovinceCityInfoExcel.xls,Sheet1都被笔者标识了,当然这一步与数据库中的存储过程取出的数据也是一对一的。(名称一致,可以减少很多不必要的麻烦,不然的话,嘿嘿....自己去想,那不是哥的事)
等下,需要将创建的EXCEL模板放置到我们的项目文件目录中。(详见第七步)
(六)SSIS操作过程(生成Package,用来调用)
这一步是最主要的过程,当然,也是很容易出错的一步。笔者会另外详细介绍制作Pac kage包的过程,本文将直接将生成的包放到VS项目中进行运用。
利用SQL Server 2005数据库自带的SQL Server Business Intelligence Devel opment Studio(SQL Server商业智能开发平台),最终生成的项目如下图所示:
然后,将在SSIS项目中生成的Package.dtsx包复制到自己的项目文件目录中。这就是我们马上进入的步骤了---->(步骤七)
(七)C#中调用SSIS创建的Package和Excel模板(可以自己编写逻辑代码进行重复利用),用来生成Excel数据
先看下我们的VS2008项目,如下图所示:
大家会发现,笔者将(五)(六)步骤生成的模板和Package包放置在项目中的“Exc el导出”目录下,当然这些文件随便你放在哪里,这是不用再废话的,哈哈。
另外,笔者简单的设计了如下很粗糙的界面,目的是根据省份来显示城市的相关信息(其实大家都是很熟悉这些的,很多项目都是有省-市-县数据库表的),添加一个导出按钮,点击的时候,我们可以参考页面显示的内容和我们生成的客户端Excel中的内容是否一致。
Oracle数据库导入导出命令(备份与恢复) Toad 一个很好的oralce数据库操作与管理工具,使用它可以很方便地导入导出数据表,用户以及整个数据库。今天在这里主要讲一下用命令行来操作oracle数据导入和导出: 备份数据 1、获取帮助: exp help=y 2. 导出一个完整数据库 exp user/pwd@instance file=path full=y 示例:exp system/system@xc file = c:/hehe full =y imp tax/test@tax file=d:/dbbak.dmp full=y 3 、导出一个或一组指定用户所属的全部表、索引和其他对象 exp system/manager file=seapark log=seapark owner=seapark exp system/manager file=seapark log=seapark owner=(seapark,amy,amyc,harold) 示例:exp system/system@xc file=c:/hehe owner=uep 4、导出一个或多个指定表 exp system/manager file=tank log=tank tables=(seapark.tank,amy.artist) 示例:exp system/system@xc file=c:/heh tables=(ueppm.ne_table) 恢复数据 1. 获取帮助 imp help=y 2. 导入一个完整数据库 imp system/manager file=bible_db log=dible_db full=y ignore=y 3. 导入一个或一组指定用户所属的全部表、索引和其他对象 imp system/manager file=seapark log=seapark fromuser=seapark imp system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold) 4. 将一个用户所属的数据导入另一个用户 imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy imp system/manager file=tank log=tank fromuser=(seapark,amy) touser=(seapark1, amy1) 5. 导入一个表 imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b) ************************ **************************** 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回Oracle 数据库中去。 1. 简单导出数据(Export)和导入数据(Import) Oracle支持三种类型的输出: (1)表方式(T方式),将指定表的数据导出。 (2)用户方式(U方式),将指定用户的所有对象及数据导出。 (3)全库方式(Full方式),将数据库中的所有对象导出。 数据导出(Import)的过程是数据导入(Export)的逆过程,它们的数据流向不同。
竭诚为您提供优质文档/双击可除word表格批量插入图片 篇一:word20xx中批量快速插入图片技巧 word20xx中批量快速插入图片技巧 我们知道,对于某些特定的字符,可以通过“自动更正”的方法实现快速替换,其实图片也是可以自动更正的,这在需要经常调用某些图片时相当实用,这样就不需要每次逐个手工插入了。这里以word20xx为例进行说明,让你在输入“1”、“2”这些数字时,能够自动替换为相关的图片(例如频繁出现的公司logo图片等)。 首先将相关的图片插入到word文档的窗口中,然后按下“ctrl+c”组合键将它们复制到剪贴板中备用。这一步至关重要,否则下面的操作将无法正常完成。 接着单击office按钮打开“word选项”对话框,然后切换到“校对”选项卡,在这里你会发现一个“自动更正选项”的按钮,单击后即可打开如图所示的对话框,在“替换”后面的文本框中输入图片名称“1”。此时我们会发现原来右下角的“添加”按钮已经可以正常使用,接下来直接单击“添加”按钮,添加图片就可以了。
需要提醒的是,如果前面的步骤没有进行的话,那么即使在“替换”下面的文本框中输入了相关的字符,也会看到“添加”按钮仍然呈现不可用的灰色状态。 按照类似的步骤,你可以继续添加常用的图片到其他自动更正的项目,以后插入相关图片时就方便多了(虽然“替换为”文本框中没有任何反应,而且确认后“替换为”一列也只是显示为“*”号,但这只是显示的问题)。 以后,当我们在word文档中输入1、2这样的数字时,按下回车键后,相关的图片就会自动出现在word文档中,大大提高了工作效率。 20xx-07-27来源:it168 篇二:word与excel连接邮件合并批量插入照片 word与excel数据连接邮件合并批量照片自动插入方法 一、建立“照片名”的excel数据文件 1.建立文件夹:在d盘根目录下建立名为:yjhebing的文件夹,在这个文件夹里面在建立一个名为:zhaopianku的文件夹,所有照片放在zhaopianku的文件夹(word表格批量插入图片)里面 图-1:zhaopianku文件夹 2.开始——运行——输入cmd,按回车键,打开dos命令框。输入d:按回车建 再输入:cdyjhebing按回车键,再输入:cdzhaopianku
雨课堂试卷批量导入模板 试卷标题:计算机基础知识 一、单选题 1.第一台电子计算机ENIAC诞生于()年。正确答案:C A. 1927 B. 1936 C. 1946 D. 1951 [解析] 第一台电子计算机ENIAC诞生于1946年。 2.与传播计算机“病毒”无关的是()。 A. 键盘 B. 网络 C. 硬盘 D. U盘 正确答案:A [解析]网络可以传播计算机病毒,硬盘和U盘都可以感染计算机病毒。 3.计算机的软件系统分为()。正确答案:C A. 程序和数据 B. 工具软件和测试软件 C. 系统软件和应用软件 D. 系统软件和测试软件 4.计算机系统是由()组成的。正确答案:D A. 主机及外部设备 B. 主机键盘显示器和打印机 C. 系统软件和应用软件 D. 硬件系统和软件系统 5.能描述计算机的运算速度的是()。正确答案:B A. 二进制位 B. MIPS C. MHz D. MB 二、多选题(每题2分) 1.微处理器又称为中央处理器,它是由(AB )组成的。 A.运算器B.控制器C.存储器D.寄存器 [解析] 中央处理器由运算器和控制器组成,运算器中包含寄存器。 2.属于应用软件的是()。正确答案:BCD A. Windows B. Word C. WPS D. PhotoShop 3.与传播计算机“病毒”有关的是()。 A. 网络 B. 键盘 C. 硬盘 D. 移动硬盘 正确答案:ACD 4.第一台电子计算机ENIAC诞生于()年。正确答案:C A. 1927 B. 1936 C. 1946 D. 1951 5.下列说法中不正确的是(ABCD)。 A.ROM 是只读存储器,其中的内容只能读一次,下次再读就读不出来了 B.硬盘通常安装在主机箱内,所以硬盘属于内存 C.CPU 不能直接与外部存储器打交道 D.任何存储器都有记忆能力,即其中的信息不会丢失 三、填空题 1.计算机由(运算器)、(控制器)、(存储器)、输入设备和输出设备组成。 2.CPU的中文意义是(中央处理单元| 中央处理器)。 备注:此题双答案,导入后需在雨课堂试卷中修改答案1为:“中央处理单元”,增加答案2:“中央处理器”。 3.1GB=(1024)MB,1MB=(1024)KB
给Word快速插入常用图片技巧 系统下载打开Word2007,先插入一张公司标志图片,并调整好适当尺寸。再选中插入的图片,单击Office 按钮,选择“Word选项”。在“Word选项”窗口中选择“校对”,单击“自动更正选项”按钮。在“自动更正”窗口的“替换”输入框中输入“公标1”,单击“添加”按钮后(如图1),确定返回。以后不管在哪个文档中你只要输入“公标1”后再继续输入,“公标1”就会自动变成公司标志的图片。 图1 在此,“替换为”一项后面不用输入,Word默认会把选中内容当成替换为内容,只是当选中的是图片时“替换为”中会显示成空白,但其实已经有图片在里面了。此外,自动更正可以设置的对象不仅限于图片,还包括文字的格式和表格。你甚至可以同时选中包括图片、表格、文字等多种对象的内容进行设置。此招最大的缺点就是只能对“文字环绕”格式为“嵌入型”的图片有效,也只能插入“嵌入型”的图片。 文档部件,用鼠标插入图片 在Word2007中也可把常用图片保存成文档部件,即可通过鼠标单击选择快速插入常用图片。其优点是比较直观,操作上更顺手,而且对图片没有任何格式限制。 在Word文档选中一张图片(例:公司标志图),切换到“插入”选项卡,单击“文档部件”,选择“将所选内容保存到文档部件库”。在“新建构件基块”窗口中输入“名称”,比如“公标1”(如图2),确定后完成设置。以后编辑时,只要单击“插入”选项卡的“文档部件”即可在下拉列表中找到添加的公司标志图,单击选择即可插入。
图2 设置后关闭Word会提示是否保存到Building Blocks.dotx文档,此时一定要选择“是”。这招对图片、表格、文字等对象也同样有效。其缺点是不适合用键盘输入,而且当添加太多文档部件后比较难找到需要图片,反而不容易输入了。 录制宏,用快捷键插入图片 通过录制宏可以用快捷键插入常用图片,也可以把图片直接添加到快速工具栏上通过鼠标单击插入,兼具前两招的效果。由于可在工具栏上显示插入图片按钮,用鼠标插入图片时要比文档部件更方便,对图片格式也没有任何限制。适于插入少数特别常用的图片,比如公章、签名等等。另一优点是对原图进行修改后,下次插入的就是修改后的新图,无需重复设置,因此也适于插入经常修改的图片。 打开Word2007,切换到“视图”选项卡,单击“宏”选择“录制宏”。在“录制宏”对话框输入宏名为“公标1”,单击下面的“键盘”按钮。在弹出“自定义键盘”窗口中按下你要设置的快捷键“Alt+Ctrl+B”(如图3),单击“指定”按钮添加到“当前快捷键”列表中,“关闭”窗口返回Word。此时Word的状态栏会显示停止录制宏的图标“■”,鼠标指针也多了个录音带图标。
Oracle10g数据导入导出 简介 Oracle 10g引入了DATA PUMP提供的是一种基于服务器的数据提取和恢复的实用程序,DATA PUMP在体系结构和功能上与传统的EXPORT和IMPORT实用程序相比有了显著的提升。DATA PUMP允许您停止和重启作业,查看运行的作业的状态,及对导入和导出的数据做限制。 注意:数据泵文件与传统的EXP/IMP数据转储文件是不兼容的。 以下是DATA PUMP的几个优点介绍: 1.数据泵(Data Pump)的所有工作都有数据库实例来完成,数据库可以并行来处理这些工作,不仅可以通过建立多个数据泵工作进程来读/写正在被导出/导入的数据,也可以建立并行I/O服务器以更快地读取或插入数据,从而,单进程瓶颈被彻底解决。 2.通过数据泵,以前通过EXP/IMP主要基于Client/Server的逻辑备份方式转换为服务器端的快速备份,数据泵主要工作在服务器端,可以通过并行方式快速装入或卸载数据,而且可以在运行过程中调整并行的程度,以加快或减少资源消耗。 3.数据泵通过新的API来建立和管理,这些新的工作主要由DBMS_DATAPUMP来完成。新的导入/导出工具完全成为了一个客户端应用,通过IMPDP/EXPDP执行的命令实际上都是在调用Server端的API在执行操作,所以一旦一个任务被调度或执行,客户端就可以退出连接,任务会在server 端继续执行,随后通过客户端实用程序从任何地方检查任务的状态和进行修改创建DIRECTORY DATA PUMP要求为将要创建和读取的数据文件及日志文件创建目录,这个参数是用来定义一个目录,前面已经提到数据泵主要在Server端工作,导出文件需要写出到Server端本地目录,这个DIRECTORY就是对应的Server 端的目录。将要访问数据泵文件的用户必须要拥有该目录的读/写权限。 注意:在开始操作之前要验证外部目录是否存在,并且下达create directory 命令的用户需要拥有create any directory的系统权限。 下面给出一个创建名为TEST_EXPDP的目录并授予hs_user,hs_his用户访问此目录读/写权限。
学生体质健康数据上报教程 一:进入学生体质健康网:可以通过百度搜索或输入网址 二:进入登入页面:输入去年注册的用户名和密码(进去之后填写基本信息和重置密码)
三、学校基本信息设置:如有变化,请调整 四、年级班级管理:可用网站上的模板批量用模板导入,也可一个年级一个年级操作。班级名称可以用统一的写一(1)班、一(2)班这样的形式(后面类推),班级编号可用1101、1102编辑【后面根据年级和班级类推,五(2)班即为1502】
此表格为我校一(1)班学生基本信息表格中的数据,请大家关注班级编号和班级名称 注意:设置班级名称和班级编号后,后期所填的表格这两样数据必须要跟之前的一样,即年级班级管理、学生基本信息、学生体质成绩三份数据中的班级名称和班级编号要完全一样,否则数据导不进去。至于学生学号,可酌情自行设定,我是以入学年份(2013)+加班级编号(01)+号码(01)即20130101这样的方式进行编排。 五、班级管理:单一导入操作:点击新增班级后,输入班级名称和班级编号---和表格中的必须一致(不要出现下列情况,班级名称和班级编号跟年级对不上,否则会出现导不进去的现象)
六、测试项目设置:必测项目不需要设置,只需设置选测项目 七、测试环境信息导入:建议采用模板导入,可复制,操作起来较快,注意日期用统一格式,2013-10-10 完成“学校基本信息”这一大栏,设置之后,接下来进行“学生体测数据管理”一栏的操作 八、导入学生基本信息--下载模板,按照要求提示将一个班级的信息复制到表中完成一个班级后,记得进行重命名,如“一(1)班学生基本信息”,最后可将所有学生的基本信息放入一个文件夹进行存放。注:小学可不用输身份证和来源。
Oracle数据库exp imp按用户导出导入实例 按用户导出再导入实例,任务要求如下: ◆1.从一台windows服务器 A 上导出 Test1 这个用户的所有对象,然后导入到linux服务器 B 上的 Test2用户。(已知Test1密码为Test1passwd 或者用system用户导出也行) ◆2.B机器上Test2用户不存在,或Test2用户已经存在两种情况(用户存在相对比较复杂) ---------如果Test2用户已经存在(数据没用,可以删除),级联删除用户及所有对象(有可能遇到有人正在连接,删除不掉的情况方法参照下文),重新创建账号并赋权。 ◆3.赋予适当的权限 操作步骤: ◆1.从 A 上导出数据文件到指定目录(目录名称自己定义,只要自己能找到就行,和用户名没有关系) sqlplus /nolog conn / as sysdba exp Test1/Test1passwd owner=Test1 file=D:\files\Test1.dmp ◆2.在A机器上查看用户默认表空间,以便导入时创建一样的表空间 SQL> select username,default_tablespace from dba_users where username ='TEST1'; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ TEST1 CMIS ◆3.查看用户使用的表空间 SQL> select DISTINCT owner ,tablespace_name from dba_extents where owner like 'TEST1'; OWNER TABLESPACE_NAME ------------------------------ ------------------------------ TEST1 XSL TEST1 CMIS ◆4.查看表空间对应的数据文件,以便在B上创建大小合适的数据文件。 SQL> select file_name,tablespace_name from dba_data_files where tablespace_name in ('CMIS','XSL'); FILE_NAME BYTES TABLESPACE ------------------------------------------------------------ ---------- ---------- D:ORACLEPRODUCT10.2.0ORADATACMISDBCMIS 8728346624 CMIS D:ORACLEPRODUCT10.2.0ORADATACMISDBCMIS01.ORA 8204058624 CMIS D:ORACLEPRODUCT10.2.0ORADATACMISDBCMIS02.ORA 4194304000 CMIS D:ORACLEPRODUCT10.2.0ORADATACMISDBCMIS03.ORA 4194304000 CMIS D:ORACLEPRODUCT10.2.0ORADATACMISDBCMIS04.ORA 4194304000 CMIS D:ORACLEPRODUCT10.2.0ORADATACMISDBCMIS05.ORA 4194304000 CMIS
前段时间,因编写报告,需要把成果图片修改名字后,将图以及相应的名字插入word文档中。一次报告,至少200张图,花了数个小时才弄完工作,同时难免出现差错。之后就一直寻找捷径,基于excel vba以前有一点基础,现将整理出来的代码分享给大家。可以去下载我编好的excel 小程序,里面有详细代码,地址在最下方。欢迎直接试用下,给个反馈建议. 1.查找文件夹中符合图片格式的文件,返回其名字 Dim fs, f, f1, fc, s Dim arr As String Set fs = CreateObject("") Address = Address = Left(Address, InStrRev(Address, "\", Len(Address))) '获得当前工作表所在文件夹路径 Set f = (Address) Set fc = i = 2 For Each f1 In fc '遍历文件 If FileIspicture Then ' 引用了自定义函数 FileIspicture 判断是否为需要查找的文件格式
phname = '获取文件名 houzhui = Right(phname, Len(phname) - InStrRev(phname, ".", Len(phname)) + 1) (i, 1) = Left(phname, InStrRev(phname, ".", Len(phname)) - 1) (i, 2) = houzhui i = i + 1 End If Next 2.修改文件名称 Sub changename() Dim Address As String Address = Address = Left(Address, InStrRev(Address, "\", Len(Address))) n = , 1).End(xlUp).row For i = 2 To n '修改名称 pname = (i, 1) & (i, 2) textname = (i, 3) houzhui = Right(pname, Len(pname) - InStrRev(pname, ".", Len(pname)) + 1) '获取后缀 Name Address & pname As Address & textname & houzhui Next i
如何在E X C E L表格中批量插入对应图片更新公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]
如何在EXCEL表格中批量插入对应图片学生照片用身份证号命名后,核对是个麻烦事儿,有了这个表格就直观多了。 制作过程如下: 1、粘贴学生信息、输入公式并向下填充 在D2单元格输入公式(复制下面的公式并粘贴到D2单元格中): ="