用sas向oracle中自动导入excel表
SAS学习系列04.-导入数据Ⅱ——Excel文件

04. 导入数据Ⅱ——Excel文件(一)导入Excel数据文件一、import语句导入语法:proc import datafile=’文件路径+文件名’ OUT=输出数据集名 DBMS=EXCEL REPLACE;<可选参数>;注:(1)REPLACE告诉SAS若“输出数据集”同名文件已经存在,则替换它;(2)可选参数:a. 指定要读取的是哪一个工作表SHEET = 工作表名;b. 若只读取工作表的一部分围RANGE = "工作表名$A1:H10";c. 是否从工作表的第一行读取数据集的列变量名?GETNAMES=YES——是;GETNAMES=NO——否;d. 读取字符和数值混合的数据表时,是否将所有数据转化为字符?MIXED=YES——是;MIXED=NO——否;示例:proc import DATAFILE = 'c:\MyRawData\OnionRing.xls'OUT=sales DBMS=XLS REPLACE;例1 路径“D:\我的文档\My SAS Files\9.3\”下的数据文件exercise.xlsx,容如下:读取工作表test2中从A1到H10的数据,第一行作为数据集的列变量名。
代码:proc import datafile = 'D:\我的文档\My SASFiles\9.3\exercise.xlsx'DBMS=EXCEL OUT = results REPLACE;SHEET = 'tests2';RANGE = '$A1:H10';GETNAMES = YES;run;proc print data = results;title'SAS Data Set Read From Excel File';run;运行结果:二、libname语句读入1. 基本语法用libname语句引用一个Excel文件(“工作簿”),其中的“工作表”作为数据集,数据集名称为:’工作表名$’n语法:libname 引用名‘文件路径+文件名’ <可选参数>;注:(1)访问数据集用:引用名. ’工作表名$’n(2)工作表若有“名称框”(Named Range:单独命名的一部分区域),将单独作为数据集,区别是数据集名没有$示例:libname results 'D:\My SAS Files\exercise.xlsx';proc print data=results.'tests1$'n;例2 路径“D:\我的文档\My SAS Files\9.3\”下的数据文件exercise.xlsx,容如下:读取工作表tests1中的数据。
批量Excel数据导入Oracle数据库

批量Excel数据导⼊Oracle数据库由于⼀直基于Oracle数据库上做开发,因此常常会需要把⼤量的Excel数据导⼊到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是⼀样的,本⽂主要介绍如何导⼊Excel数据进⼊Oracle数据库的内容。
⼀般我们拿到的Excel数据,都会有⼀个表头说明,然后下⾯是⼀连串的数据内容,如下图所⽰:⽽Oracle中数据库⼀般为英⽂名称,中⽂名称就需要转义,为了⽅便导⼊,我把中⽂名称对照数据库的字段,把表头修改为对应的字段名称,如果没有数据库对应的字段,那么删除Excel的⽆⽤列即可,如下所⽰。
⾸先我们在导⼊Excel的例⼦中加载显⽰要导⼊的数据,⼀个是为了直观,第⼆个也是为了检查数据的有效性,避免出错,界⾯如下所⽰:在介绍导⼊操作前,我们先要分析下数据,否则就很容易出现错误的语句,⼀般⽇期的格式、数字的格式就要特别注意,⽂本格式⼀般看是否超出字段的长度,⼀般成功导⼊前都会发⽣好多次的错误问题,解决了这些格式的问题,基本上就OK了。
如下⾯⽇期和数字的格式问题,就必须注意转换为对应的内容格式:下⾯介绍具体的显⽰数据和导⼊数据的操作代码:显⽰Excel数据的代码如下所⽰:代码private string connectionStringFormat = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '{0}';Extended Properties=Excel 8.0";private DataSet myDs = new DataSet();private void btnViewData_Click(object sender, EventArgs e){if (this.txtFilePath.Text == ""){MessageUtil.ShowTips("请选择指定的Excel⽂件");return;}string connectString = string.Format(connectionStringFormat, this.txtFilePath.Text);try{myDs.Tables.Clear();myDs.Clear();OleDbConnection cnnxls = new OleDbConnection(connectString);OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);myDa.Fill(myDs, "c");dataGrid1.DataSource = myDs.Tables[0];}catch (Exception ex){MessageBox.Show(ex.Message);}}导⼊操作的代码如下所⽰(由于数据格式需要验证,以及需要判断数据库是否存在指定关键字的记录,如果存在,那么更新,否则插⼊新的记录,如果仅仅是第⼀次导⼊,操作代码可以更为精简⼀些):代码private void btnSaveData_Click(object sender, EventArgs e){if (this.txtFilePath.Text == ""){MessageUtil.ShowTips("请选择指定的Excel⽂件");return;}if (MessageUtil.ShowYesNoAndWarning("该操作将把数据导⼊到系统的⽤户数据库中,您确定是否继续?") == DialogResult.Yes){InsertData();}}private bool CheckIsDate(string columnName){string str = ",PREPARE_DATE,COPY_DATE,COPY_VALIDITY,BUSINESS_VALIDITY,OPENING_APPROVAL_DATE,OPENING_DATE,EDITTIME,LICENSE_DATE,LICENSE_VALIDITY,TE return str.Contains("," + columnName.ToUpper() + ",");}private bool CheckIsNumeric(string columnName){string str = ",FIXED_CAPITAL,REG_CAPITAL,MARGIN,PARK_AREA,PARK_SPACE_NUMBER,";return str.Contains("," + columnName.ToUpper() + ",");}private void InsertData(){int intOk = 0;int intFail = 0;if (myDs != null && myDs.Tables[0].Rows.Count > 0){string accessConnectString = config.GetConnectionString("DataAccess");OracleConnection conn = new OracleConnection(accessConnectString);conn.Open();OracleCommand com = null;#region组装字段列表string insertColumnString = "ID,";DataTable dt = myDs.Tables[0];int k = 0;foreach (DataColumn col in dt.Columns){insertColumnString += string.Format("{0},", col.ColumnName);}insertColumnString = insertColumnString.Trim(',');#endregiontry{foreach (DataRow dr in dt.Rows){if (dr[0].ToString() == ""){continue;}#region组装Sql语句string insertValueString = "SEQ_TBPARK_ENTERPRISE.Nextval,";string updateValueString = "";string COMPANY_CODE = dr["COMPANY_CODE"].ToString().Replace("<空>", "");#region拼接Sql字符串for(int i = 0; i < dt.Columns.Count; i++){string originalValue = dr[i].ToString().Replace("<空>", "");//if (!CheckIsDate(dt.Rows[0][i].ToString()))if (!CheckIsDate(dt.Columns[i].ColumnName)){if (!string.IsNullOrEmpty(originalValue)){if (CheckIsNumeric(dt.Columns[i].ColumnName)){insertValueString += string.Format("'{0}',", Convert.ToDecimal(originalValue));updateValueString += string.Format("{0}='{1}',", dt.Columns[i].ColumnName, Convert.ToDecimal(originalValue));}else{insertValueString += string.Format("'{0}',", originalValue);updateValueString += string.Format("{0}='{1}',", dt.Columns[i].ColumnName, originalValue);}}else{insertValueString += string.Format("NULL,");updateValueString += string.Format("{0}=NULL,", dt.Columns[i].ColumnName);}}else{if (!string.IsNullOrEmpty(originalValue)){insertValueString += string.Format("to_date('{0}','yyyy-mm-dd'),", Convert.ToDateTime(originalValue).ToString("yyyy-MM-dd"));updateValueString += string.Format("{0}=to_date('{1}','yyyy-mm-dd'),", dt.Columns[i].ColumnName, Convert.ToDateTime(originalValue).ToString("yyyy-MM-dd"));}else{insertValueString += string.Format("NULL,");updateValueString += string.Format("{0}=NULL,", dt.Columns[i].ColumnName);}}}insertValueString = insertValueString.Trim(',');updateValueString = updateValueString.Trim(',');#endregionstring insertSql = string.Format(@"INSERT INTO tbpark_enterprise ({0}) VALUES({1})", insertColumnString, insertValueString);string updateSql = string.Format("Update tbpark_enterprise set {0} Where COMPANY_CODE='{1}' ", updateValueString, COMPANY_CODE);string checkExistSql = string.Format("Select count(*) from tbpark_enterprise where COMPANY_CODE='{0}' ", COMPANY_CODE);#endregion#region写⼊数据try{com = new OracleCommand();com.Connection = conn;mandText = checkExistSql;object objCount = com.ExecuteScalar();bool succeed = false;bool exist = Convert.ToInt32(objCount) > 0;if (exist){//需要更新//WriteString(updateSql);mandText = updateSql;succeed = com.ExecuteNonQuery() > 0;}else{//需要插⼊//WriteString2(insertSql);mandText = insertSql;succeed = com.ExecuteNonQuery() > 0;}if (succeed){intOk++;}else{intFail++;}}catch (Exception ex){intFail++;WriteString(mandText);LogHelper.Error(ex);break;}#endregion}#region关闭if (conn != null && conn.State != ConnectionState.Closed){conn.Close();}if (com != null){com.Dispose();}#endregion}catch (Exception ex){LogHelper.Error(ex);MessageUtil.ShowError(ex.ToString());}if (intOk > 0 || intFail > 0){string tips = string.Format("数据导⼊成功:{0}个,失败:{1}个", intOk, intFail); MessageUtil.ShowTips(tips);}}}以上代码,为了⽅便,使⽤了输出脚本的⽅式进⾏验证对⽐,⼀般情况下也是⽤得着的。
把Excel中的数据导入Oracle数据库中精修订

把E x c e l中的数据导入O r a c l e数据库中SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#教你怎么样把Excel文件中的数据导入到Oracle数据库中第一种:最简单的方法。
在EXCEL中全选数据,然后COPY。
接着打开PL/SQLDEVELOPER,打开SQL窗口,输入select*frommytableforupdate;然后执行,就可以看到查出目的表mytable数据,如果是空表,当然是没数据了。
然后点击下面列表上方的锁(编辑数据),不管有没有数据,我们选择最后一个空行的行头,让整行变成黑色则表示整行已全选中。
注意该行左边是有个黑色实心三角箭头的。
然后粘贴,再commit就OK咯。
说明:而且这个方法还有个好处就是对EXCEL中的日期型、数值型字段的处理也很正常,数据类型不会丢失。
图:选中了行然后粘贴数据第二种:简单的方法。
先将Excel文件另存为一个.csv文件,然后编写一个insert.ctl文件,ctl文件写法如下:loaddata --1、控制文件标识infile'test.csv' --2、要输入的数据文件名为test.csv appendintotabletable_name--3、向表table_name中追加记录fieldsterminatedby',' --4、字段终止于',',是一个逗号(field1,field2,field3,...fieldn)-----定义列对应顺序field(x)要与Oracle表中的字段名保持一致(大写)最后在DOS命令下执行以下命令:sqlldruser/passwordcontrol=insert.ctl图:表示导入了12条记录第三种:比较简单的方法。
如果数据不是很多,可以使用如下方法:假设表名为test_excel,有4列数据,则设置Excel的E1单元格的值为="insertintotest_excelvalues(‘”&A1&“’,‘”&B1&“’,‘”&C1&“’,‘”&D1&“’);”向下拖动该公式,则生成一列sql,把其copy到sql/plus中执行即可(如果数据中有单引号,需要先替换成两个),临时导数据用这种方法还是比较方便的。
Oracle使用SqlLoad导入Excel大数据操作方法

Oracle使用SqlLoad导入Excel大数据操作方法第一步:按excel格式整理需要导入的源数据第二步:将excel表格另存为csv(逗号分割)格式。
第三步:用文本方式打开impfile.ctrl文件,修改里面的infile行为文件实际存放路径和名称,比如:infile 'c:\cust.csv'第四步:用文本方式打开impfile.ctrl文件,修改append into table 行后面加上要导入的表明,例如:append into table if_imp_card第五步:用文本方式打开impfile.ctrl文件,修改TRAILING NULLCOLS下面文本内容为表对应的字段和分割符(terminated by ','),最后一个字段用(terminated by whitespace),对于日期类型要在字段后定义上日期类型格式(Date(10) "YYYY-MM-DD"),例如:TRAILING NULLCOLS(oldtype terminated by ',',cardno terminated by ',',cardpwd terminated by ',',trackinfo terminated by ',',oldmkt terminated by ',',name terminated by ',',sex terminated by ',',cardflag terminated by ',',birthday Date(10) "YYYY-MM-DD" terminated by ',',idtype terminated by ',',idno terminated by ',',mindate Date(10) "YYYY-MM-DD" terminated by ',',maxdate Date(10) "YYYY-MM-DD" terminated by ',',ljjf terminated by ',',jfye terminated by ',',xfje terminated by ',',lczhye terminated by ',',flqye terminated by ',',addr terminated by ',',zipcode terminated by ',',tel terminated by ',',mobile terminated by whitespace)第六步:将impfile.ctl文件和要导入的csv数据文件拷贝到同一目录下,建议存放在盘符根目录;第七步:在CMD命令中输入oracle安装的bin路径,执行该命令执行如下指令:sqlldr userid=用户名/用户密码@数据库实例control=c:\impfile.ctl log=c:\impfile.log例如:D:\app\product\11.2.0\dbhome_1\BIN>sqlldr userid=dbusrif/future@crmls control=c:\impfile.ctl log=c:\impfile.log。
将数据导入excel表格的方法

将数据导入excel表格的方法
一。
将数据导入 Excel 表格,这可是个实用的技能!首先得准备好您的数据,甭管是从数据库里弄出来的,还是自己整理的文档。
1.1 要是数据在文本文件里,像 CSV 这种格式,那打开 Excel 后,直接点击“文件”,然后选“打开”,找到您那文件,Excel 就能聪明地识别并导入。
1.2 要是数据在其他软件里,比如 Word 文档,您可以把相关内容选中,复制粘贴到 Excel 里。
不过得留意格式,有时候可能得稍微调整调整。
二。
还有些更高级的法子。
2.1 假如您经常要从同一个数据源导入数据,那就可以使用“数据连接”功能。
在 Excel 里找到“数据”选项卡,点“获取外部数据”,然后按照提示一步步来,设置好连接参数,以后每次要导入,就省事多了。
2.2 对于那些从网页上获取的数据,Excel 也有招儿。
您可以通过“自网站”功能,输入网址,Excel 能帮您把有用的数据抓取过来。
2.3 另外,要是您会编程,比如 VBA ,那就更厉害了,自己写代码来控制数据导入,想怎么弄就怎么弄,那叫一个随心所欲!
三。
不管用啥方法,导入后都得检查检查。
3.1 看看数据有没有缺失的,格式对不对,有没有乱码啥的。
3.2 要是有问题,别着急,慢慢调整,总能把数据弄得规规矩矩,整整齐齐的。
将数据导入 Excel 表格,方法多多,您多试试,总能找到最适合您的那一招!。
SAS批量导入Excel

SAS批量导入Excel%macro im_excel(/*positional parameters:keep in order*//*.SAS-data-set*/ dsn,/*fileref | "filepath"*/file/*keyword parameters*/,/*DBMS types: EXCEL | EXCELCS | XLS | XLSX */ dbms=excel ,/*replace: (blank) | REPLACE */ replace=replace ,/*range of spreedsheet:(blank) | rangename|sheet|sheet | sheetUR:LR */range=,/*firstobs : N*/ firstobs=1,/*obs: N */ obs=1048576,/*YES|NO */ getnames=yes,/*YES|NO */ scantext=yes,/*YES|NO */ scantime=yes,/*YES|NO */ usedate=yes,/*YES|NO */ mixed=no);proc import out=&dsndatafile=&filedbms=&dbms &replacerange="&range";dbdsopts="firstobs=&firstobs obs=&obs";getnames=&getnamesscantext=&scantextscantime=&scantimeusedate=&usedatemixed=&mixedrun;%mend im_excel;%macro im_1m1excel(RootPath,FileName,Extension); libname MyExcel Excel "&RootPath.\&Filename..&Extension"; proc sql noprint;select catt(trim(libname),'.',quote(trim(memname)),'n') into: namelist seperated by ' 'from dictionary.tableswhere libname in ('MYEXCEL');quit;%put &namelistdata &FileNameset &namelistrun;%mend im_1m1excel;%macro im_m1mexcel(dir=) ; filename indata pipe "dir &dir /b"; data FileName;length fname $20.;infile indata truncover;input fname $20.;dname=scan(fname,1,".");call symputx(cats('File',_n_),fname); call symputx(cats('ds',_n_),dname); call symputx('NumFile',_n_);run;%do i=1 %to &NumFileproc import out=&&ds&idatafile="&Dir\&&file&i"dbms=excel replace;run;%end;%mend;。
将excel2007中的数据导入SAS中以及数据表在SAS程序里如何调用的方法

将excel中的数据导入SAS中:
注意你的表格应当在第一行添加一行作为变量名行(在SAS中会自动将第一行元素作为变量名)(如x1 x2 x3 x4….)
先将excel数据表(例如表sheet 1)保存成csv格式,然后复制到安装目录下的saslink,如图
接着打开sas程序,点击菜单栏File下的import Data,
选择csv,点击next,然后选择Browse浏览目录下的表sheet 1打开(即上述saslink下的表shee1)。
然后点击next,然后左边是LIBiary数据库下的数据集WORK(这个不用管),右边是你的数据组的名字(如可填aa);然后下一步是
这个是可以选择将你的数据放到指定文件夹下,可以不管直接点击Finish。
然后左边便会出现你要的数据表。
下面说一下SAS中这个数据表怎么在程序里怎么引用:
以数学建模中多元统计分析的主成份分析为例进行说明:
假设这是主成份分析的主要程序,然后将他改成:
data ex;
set 'C:\Document\_TD5376\aa';
/*C:\Document\_TD5376为数据aa所在位置,aa为自己定义的数据集名称)*/ proc princomp out=prin ;
var x1-x106; /*x1与x106为第一行变量名*/
run;
proc print data=prin;
var x1-_x106;
run;
即:。
Oracle导入导出Excel

Oracle导入导出ExcelV1.0在各种不同的数据库数据之间的交互时,存在不同数据库数据类型的转换。
特别是excel格式的数据,在和oracle格式的数据在转换的过程中要通过access数据库,本文的转换方式不用通过转换就能直接把excel格式的数据放到oracle数据库里。
本知识用途本文档适合oracle数据与excel格式的数据之间的转换,如把oracle格式的数据转换成excel格式或是把excel格式的数据转换为oracle格式。
Oracle与excel的互换1、oracle导出excel格式在机子上安装PL/SQL并登陆,点击new-Report Window,在打开的窗口里输入SQL 语句,操作如下图:在打开的窗口里写出你要导出的数据的SQL语句,写好SQL后执行一下你写好的SQL,或是点一下F8。
操作如图在查询出来数据右面有一排按钮。
点击Exprot Results..按钮,选择Excel 操作如图:点击后会出现下图,在excel里面打开你刚查询出来的那些数据,如下图:然后把该EXCEL存在本机上就可以了。
2、Excel数据导入到oracle打开你要导入的Excel数据。
另存为“文本文件(以逗号分隔).txt”文件。
打开PL/SQL并登陆,选择tools-Text Importer,出现如下图界面:选择open data file 按钮,选择刚存为txt格式的文件,出现如下图界面然后点击Date to Oracle按钮,出现图下图界面选择导入到的用户、导入到的表,并把各字段同表里的字段对应,如把该数据导入到一张新表中,点击界面中的creat table按钮,新建表,如下图所有的字段都对应上后,发现,最下面的import按钮由灰色变亮了,点击Import 按钮,excel里的数据就会部导入到了oracle表里了。
在导入时还可以选择每次提交的数据条数和是否覆盖,操作如图总结此文档用于oralce和Excel数据之间的转换,不用Access和oracle两个数据库之间的交互,也可以把数据转换过去,省去了我们建立ODBC数据源和配置的过程,给我们工作同提供了方便。