2008年3月12日
视频文件转化为FLASH的SWF格式
手把手教程.将我们的视频文件转化为FLASH的SWF格式 第一篇
有时候手头有个不错的电影想和朋友分享,可惜有的时候视频文件实在太大,就算是mpeg4的压缩率文件大小也是很可观,限于网速和文件大小的原因,无法发到网上与朋友们一起分享,有什么办法能使我们制作好的视频文件压缩得更小呢?
在这里给大家介绍一个终极压缩方法,把视频压缩成FLASH的SWF格式的文件,几百兆的文件一下子缩小成为了只有几兆的文件,这样一来,我们就可以把自己做的漂亮的动画和朋友们一起分享了,我们站点上的学员作品展示都是通过这种方法来实现的
下面给大家介绍压缩的流程:
首先,我们必须准备压缩的软件,这个过程我们需要两种软件,FlashMX2004,QuickTime完全版,这都是很大众化的软件,分别把他们都安装好.
请先确定你的机器上的QuickTime是不是完全版,判断的方法是回忆你是否在安装QuickTime的时候输入过序列号没有,如果有,那么请跳过这一步,你的QuickTime已经是完全版的.还有一种更直观的方法.我们打开我们的QuickTime
[img]http://www.nowcg.com/upload/avi2swf/001.jpg[/img]
为了能让QuickTime能输出FLV格式(FLV格式是Flash的一种视频格式),我们可以在FlashMX2004安装的目录下有一个Flash_Video_Exporter.exe的文件安装一下
[img]http://www.nowcg.com/upload/avi2swf/002.jpg[/img]
QuickTime可以输出我们的视频文件成为任意格式. 安装完Flash_Video_Exporter.exe文件后,我们再打开我们的QuickTime,选择输出选项,我们会发现QuickTime的EXPORT的选项目多了一个输出选项
[img]http://www.nowcg.com/upload/avi2swf/003.jpg[/img]
好了,我们现在可以选择我们需要压缩的视频,
使用QuickTime打开它,用输出选项选择输出格式为FLV格式,请先不要选择保存,我们要对我们的压缩率进行一定地设置,选择QuickTime的输出选项中的选项,对我们的视频的压缩比进行一定的比率选择
[img]http://www.nowcg.com/upload/avi2swf/004.jpg[/img]
现在我们已经对我们的压缩率进行了一定地选择,选择保存,就可以开始压缩我们的视频文件,当然,如果你的视频非常大,这就是一个很缓慢的过程,毕竟这是一个极高压缩率的运算
[img]http://www.nowcg.com/upload/avi2swf/005.jpg[/img]
[img]http://www.nowcg.com/upload/avi2swf/006.jpg[/img]
好了,现在我们已经输出了我们的FLV格式文件,是否已经完成了呢?~还没有,我需要另外一个软件进行最终处理,打开FLASHMX2004,不会用FLASH?~~没关系,我们仅仅只用到它其中的一个功能而已,况且它本身就是一个非常简单的软件,三维动画你都搞定了,区区一个二维FLASH又算得了什么,我们现在打开FLASHMX2004
[img]http://www.nowcg.com/upload/avi2swf/007.jpg[/img]
在FLASH软件里
首先,我们新建一个场景文件,选择>修改>文档 这时候我们会看到一个对话框,我们对它进行一定地修改
[img]http://www.nowcg.com/upload/avi2swf/008.jpg[/img]
修改完毕以后,我们选择 文件>导入>导入到库, 选择我们刚才压缩的FLV文件
[img]http://www.nowcg.com/upload/avi2swf/009.jpg[/img]
[img]http://www.nowcg.com/upload/avi2swf/010.jpg[/img]
打开库,窗口>库
从库中点住Audi-X8.flv拖到舞台上
[img]http://www.nowcg.com/upload/avi2swf/011.jpg[/img]
这时候会有一个对话框弹出, 提示你侦的长度不够,是否延长侦数.选择"是"
把对象对齐舞台,使其居于舞台中央.
打开 窗口>设计面板>对齐,选取对象,然后打开相对于舞台按钮,再点水平居中,垂直居中.
[img]http://www.nowcg.com/upload/avi2swf/012.jpg[/img]
好了,我们可以输出看我们的成果了 选择 文件>导出>导出影片
[img]http://www.nowcg.com/upload/avi2swf/013.jpg[/img]
选择导出SWF格式
[img]http://www.nowcg.com/upload/avi2swf/014.jpg[/img]
选择输出质量,调整高一些
[img]http://www.nowcg.com/upload/avi2swf/015.jpg[/img]
[img]http://www.nowcg.com/upload/avi2swf/016.jpg[/img]
[size=4][b]支持,我也来补充一下。[/b][/size]
[color=Red]Flash MX 2004 视频导入功能详解[/color]
Flash MX 2004重要的特性之一就是对多种视频文件导入和应用的支持。本文将为大家介绍这一特性的应用方法。
如果您的系统上安装了 QuickTime 4 或更高版本(Windows 或 Macintosh)或 DirectX 7 或更高版本(仅限 Windows),则可以导入各种文件格式的嵌入视频剪辑,格式包括 MOV(QuickTime 影片)、AVI(音频视频交叉文件)和 MPG/MPEG(运动图像专家组文件)。可以导入 MOV 格式的链接视频剪辑。
可以将带有嵌入视频的 Flash 文档发布为 SWF 文件。带有链接视频的 Flash 文档必须以 QuickTime 格式发布。
如果系统中安装了 QuickTime 4(Windows 和 Macintosh),则在导入嵌入视频时支持以下的视频文件格式:
文件类型
扩展名
音频视频交叉
.avi
数字视频
.dv
运动图像专家组
.mpg、.mpeg
QuickTime 影片
.mov
如果系统安装了 DirectX 7 或更高版本(仅限 Windows),则在导入嵌入视频时支持以下的视频文件格式:
文件类型
扩展名
音频视频交叉
.avi
运动图像专家组
.mpg、.mpeg
Windows 媒体文件
.wmv、.asf
在默认情况下,Flash 使用 Sorenson Spark 编解码器 导入和导出视频。编解码器是一种压缩/解压缩算法,用于控制导入和导出期间多媒体文件的压缩和解压缩方式。有关 Sorenson Spark 编解码器的信息,请参阅关于 Sorenson Spark 编解码器。
如果试图导入系统不支持的文件格式,则 Flash 会显示一条警告消息,指明无法完成该操作。在有些情况下,Flash 可能只能导入文件中的视频,而无法导入音频。例如,系统不支持用 QuickTime 4 导入的 MPG/MPEG 文件中的音频。在这种情况下,Flash 会显示警告消息,指明无法导入该文件的音频部分。但是仍然可以导入没有声音的视频。
[color=Red]PS:实际使用中感觉对QuickTime文件的支持最好,对于使用最多的用mpeg4,xvid等压缩的AVI格式支持并不好,如果不想郁闷的话最好用mov格式(主要原因是大家编码器装得太多互相冲突,想解决他们你慢慢郁闷吧!)。但关于对一般视频文件转换为mov格式其实也是一件很昏倒的事,我推荐用AE(大家都没翘课吧),当然premiere也可以,但adobe的premiere所有版本对xvid及divx编码的输出天生有冲突,不知adobe是怎么想的,而作为视频编码xvid的压缩和画质实在太优秀了,但在AE中就没有premiere的诡异问题,所以只有AE了,而且AE输出的画质是最好的。步骤:在AE中file->import一个影片文件(AE支持几乎全部视频格式的文件),再高亮选择此文件,在file->export->quicktime影片,设置如下[/color]
[IMG]http://photobucket.com/albums/v648/yukikaze_top/flash_movies/image001.png[/IMG] [IMG]http://photobucket.com/albums/v648/yukikaze_top/flash_movies/image003.png[/IMG]
[color=Red]Premiere的转换方法类似,只是还有很多郁闷的选项。其它的软件推荐Eo-video,支持很多格式,包括rm哦,但画质较次。而对于完整版quicktime播放器提供的转换,支持的格式也有限。(关于quicktime格式的压缩编码详解如果大家想听的话我可以近期写写)[/color]
[color=Blue]一、Sorenson Spark编解码器 [/color]
Sorenson Spark 是包含在 Flash 中的运动视频编解码器,它使您可以向 Flash 中添加嵌入的视频内容。Spark 是高品质的视频编码器和解码器,它显著地降低了将视频发送到 Flash 所需的带宽,同时提高了视频的品质。由于包含了 Spark,Flash 在视频性能方面获得了重大飞跃。在 Flash 5 或更早的版本中,只能使用顺序位图图像模拟视频。
现在可供使用的 Sorenson Spark 有两个版本:Sorenson Spark 标准版包含在 Flash MX 2004 和 Flash Player 7 中。Spark 标准版编解码器对于慢速运动的内容(例如人在谈话)可以产生高品质的视频。Spark 视频编解码器由一个编码器和一个解码器组成。编码器(或压缩程序)是 Spark 中用于压缩内容的组件。解码器(或解压缩程序)是对压缩的内容进行解压以便能够对其进行查看的组件。解码器包含在 Flash Player 中。
对于数字媒体,可以应用两种不同类型的压缩:空间和时间。
时间压缩可以识别各帧之间的差异,并且只存储这些差异,以便根据帧与前面帧的差异来描述帧。没有更改的区域只是简单地重复前面帧中的内容。时间压缩的帧通常称为帧间。
另一方面,空间压缩适用于单个数据帧,与周围的任何帧无关。空间压缩可以是无损 的(不丢弃图像中的任何数据)或有损 的(有选择地丢弃数据)。空间压缩的帧通常称为内帧。
Sorenson Spark 是帧间编解码器。与其他压缩技术相比,Sorenson Spark 的高效帧间压缩在众多功能中尤为独特。它只需要比大多数其他编解码器都要低得多的数据速率,就能产生高品质的视频。许多其他编解码器使用内帧压缩;例如,JPEG 是内帧编解码器。
但是,帧间编解码器也使用内帧。内帧用作帧间的参考帧(关键帧)。Sorenson Spark 总是从关键帧开始处理。每个关键帧都成为后面的帧间的主要参考帧。只要下一帧与上一帧显著不同,该编解码器就会压缩一个新的关键帧。
用 Sorenson Spark 创建 Flash 视频的提示
如何压缩视频很大程度上取决于视频的内容。对于动作极少且只是间中动一两下的谈话者头部画面,对它的视频剪辑进行压缩与对足球比赛的镜头进行压缩有很大不同。以下是关于产生最佳 Flash 视频的一些提示:
力求简洁 避免使用复杂的过渡特效,这是因为它们的压缩效果并不好,并且可能会使最终压缩的视频在画面过渡时显得“矮胖”。硬切换通常最好,也可以使用快速的淡入淡出。假设有一段视频显示一个从第一条轨道后面开始缩放的物体,该物体同时还进行“页面转换”或绕着一个球转动,最后飞离屏幕,这些画面可能很吸引人,但其压缩效果通常欠佳,因此应少用。
了解观众的数据速率 当通过 Internet 发送视频时,则应该以较低的数据速率产生文件。高速连接 Internet 的用户几乎不用等待即可查看该文件,但是拨号用户必须等待文件下载。最好将剪辑变短,使得下载时间处于拨号用户能够接受的范围内。
选择适当的帧频 帧频表明每秒钟播放的帧数。如果剪辑的数据速率较高,则较低的帧频可以改善在低端计算机上的回放效果。例如,如果要压缩动作较少的谈话者头部的视频剪辑,将帧频降低一半可能只会节省 20% 的数据速率。但是,如果压缩高速运动的视频,降低帧频会对数据速率产生显著的影响。
因为视频在以最初的帧频观看时效果会好得多,所以如果发送通道和回放平台允许的话,Macromedia 建议保留高的帧频。但是,如果需要降低帧频,按整数倍降低帧频将会带来最佳结果。
选择适合数据速率的帧大小 和帧频一样,文档的帧大小对于产生高品质的视频是很重要的。对于给定的数据速率(连接速度),增大帧大小会降低视频品质。在为文档选择帧大小时,还必须考虑帧频、原始资料和个人喜好。应将下面列出的常用帧大小作为准则使用。做些试验来找出适合您的项目的最佳设置。
调制解调器:160 x 120
双信道 ISDN:192 x 144
T1/DSL/电缆:320 x 240
了解渐进式下载 应该了解下载视频所需的时间。在下载视频剪辑时,您可能希望显示其他一些内容来“掩饰”下载。对于较短的剪辑,可以使用下面的公式:暂停 = 下载时间 - 播放时间 + 10% 的播放时间。[color=Red]例如,如果剪辑是 30 秒长,并且需要一分钟进行下载,则应该给剪辑 33 秒的缓冲时间:60 秒 - 30 秒 + 3 秒 = 33 秒。[/color]
使用清晰的视频 原来的视频品质越高,最终的效果就越好。虽然 Internet 视频的帧频和帧大小通常都小于在电视上看到的,但是计算机显示器比传统的电视机具有更好的颜色保真度、饱和度、清晰度和分辨率。即使是显示在小窗口中,图像品质对于数字视频的重要性也比对于标准模拟电视的重要性高。人为干扰和杂波很难在 TV 上观察到,但是在计算机上却明显得使人厌烦。
消除杂波和交错 在捕获视频内容之后,您可能需要消除杂波和交错。
制作音频时遵守同样的准则 在制作音频时也需考虑制作视频时的同样问题。为了达到好的音频压缩效果,必须使用清晰的原始音频。如果要对 CD 中的素材编码,则在记录文件时,尝试使用直接数字转换而不是通过声卡的模拟输入来进行。声卡会引入不必要的数模和模数转换,这样会在源音频中产生噪声。可以找到用于 Windows 和 Macintosh 平台的直接数字转换工具。如果必须从模拟源中进行记录,一定要使用最高品质的声卡。
[color=Blue]二、嵌入视频剪辑[/color]
“视频导入”向导为将视频导入到 Flash 文档提供了简洁的界面。此向导使您可以选择是否将视频剪辑导入为嵌入或链接文件。
当将视频剪辑导入为嵌入文件时,您可以在向导中选择对视频进行编码和编辑的选项。单击“下一步”按钮可进入向导中后面的窗格,单击“上一步”按钮可返回到前面的窗格。
可以将各种文件格式的视频剪辑导入为嵌入文件,具体取决于您的系统。有关支持的文件格式的信息,请参阅关于导入视频的文件格式。可以通过沿时间轴拖动播放头预览导入视频的帧。但是,声音不会回放。要预览具有声音的视频,请使用“测试影片”命令。请参阅测试文档的下载性能。
当将视频导入为嵌入文件时,您可以在导入之前编辑此视频。也可以应用自定义的压缩设置,包括带宽或品质设置以及颜色纠正、裁切和其他选项的高级设置。在“视频导入”向导中可以选择编辑和编码选项。导入视频剪辑后无法对它进行编辑。
[color=Red]嵌入视频剪辑的操作步骤如下:[/color]
1.选择 文件->导入,把视频剪辑直接导入当前文档的编辑区;或选择文件->导入库中,把视频剪辑导入当前文档的图符库中。
[IMG]http://photobucket.com/albums/v648/yukikaze_top/flash_movies/image005.png[/IMG]
2. “视频导入”向导提供编辑选项,使您可以在导入嵌入视频时对其进行编辑。您可以选择剪辑的开始和停止导入点、从一个导入的剪辑中创建多个剪辑和选择其他编辑选项。
[IMG]http://photobucket.com/albums/v648/yukikaze_top/flash_movies/image007.png[/IMG] [IMG]http://photobucket.com/albums/v648/yukikaze_top/flash_movies/image009.png[/IMG]
[color=Red]PS:这里对影片的剪辑很有用,不必在premiere中把影片剪辑好,在这里简单剪辑一下就好啦,->是起始点,
我们可以看一下前后的比较
[img]http://www.nowcg.com/upload/avi2swf/017.jpg[/img]
好了,我们可以看看我们的成果了,虽然效果可能没有视频那么好,但是相对它的文件大小而言,它是性价比最高的一种压缩方式了.基本上几百M的视频率压缩起来最终不到10M,我们再也不用怕巨大的文件而不能使朋友们欣赏到我们制作的优秀动画片了.
[img]http://www.nowcg.com/upload/avi2swf/018.jpg[/img]
[b]还有其他的方法,待续……[/b]
http://www.orsoon.com/Soft/4385.html
1.Access数据库的DSN-less连接方法:
set adocon=Server.Createobject("adodb.connection")
adoconn.Open"Driver={Microsoft Access Driver(*.mdb)};DBQ="& _
Server.MapPath("数据库所在路径")
2.Access OLE DB连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Provider=Microsoft.Jet.OLEDB.4.0;"& _
"Data Source=" & Server.MapPath("数据库所在路径")
3.SQL server连接方法:
set adocon=server.createobject("adodb.recordset")
adocon.Open"Driver={SQL Server};Server=(Local);UID=***;PWD=***;"& _
"database=数据库名;"
4.SQL server OLE DB连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"provider=SQLOLEDB.1;Data Source=RITANT4;"& _
"user ID=***;Password=***;"& _
"inital Catalog=数据库名"
5.Oracle 连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"
6.Oracle OLE DB 连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"
7.dBase 连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;"
8.mySQL 连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"
9.Visual Foxpro 连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"
10.MS text 连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;"&_
"extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"
11.MS text OLE DB 连接方法:
set adocon=Server.Createobject("adodb.connection")
adocon.open"Provider=microsof.jet.oledb.4.0;data source=your_path;"&_
"Extended Properties'text;FMT=Delimited'"
一、 PPT转至DOC
在三种格式的转换技巧中,PPT→DOC无疑是最简单的一种了,因为我们完全可以不使用任何工具软件就能轻松完成这个目的,具体方法有二。
方法一
1. 打开PowerPoint软件,调入待转换幻灯文档。
2. 点击执行“文件”菜单→“发送→Microsoft Office Word”命令,将其导出至Word软件,如图1所示。
|
图1 |
3. 然后,在弹出的如图2所示窗口中选择“只使用大纲”单选框,最后点击“确定”按钮。
|
图2 |
4. 稍等片刻,PPT文档便被导出到Word软件,这时我们再根据公司的要求对DOC文件进行相应的格式编排后保存即可。
方法二
1. 打开PowerPoint软件,调入待转换幻灯文档。
2. 点击执行“文件”菜单→“另存为”命令,在弹出的如图3所示对话框中将“保存类型”更改为“大纲/RTF文件”后点击“保存”按钮。
|
图3 |
3. 双击这个RTF文档以后,Word软件便会自动打开,这时我们同样是根据公司的要求对文档重新排版就可以了,如图4所示。
|
图4 |
二、 PPT转至PDF
相对于DOC格式,PDF以其不易更改、高度模仿原文档样式的特点也在办公领域中占有不小的位置。而如何将PPT文档转换为PDF格式自然也是好多朋友所关注的了,这里我们向大家推荐PPT to PDF Converter这个工具(以下简称:PDF Converter)。
1. 安装好PDF Converter软件后,它便会在PowerPoint中生成一个快捷工具栏,如图5所示。
|
图5 |
2. 其中,点击“PDF Setting”按钮可以设置PDF转换时的参数,而如果我们没有特殊要求,直接点击“Save As PDF”按钮便可以将PPT文档快速转换为PDF文件了,如图6所示为转换好的PDF文件。
|
图6 |
【小提示】当然,除了这款软件,我们也可以直接安装上Adobe官方的Acrobat,使用方法也与本文介绍的这款PDF Converter极为相似,而且还有更为灵活的参数设置,唯一的缺点就是软件体积稍大,有兴趣的朋友不妨试一试。
三、 PPT转至Flash
作为一款支持动态效果的文档格式,我们有时也可能将PPT文件转换为Flash格式(SWF格式)。当然,要转换为这种格式也需要一款小软件的支持,它就是 —— Camtasia Studio。
1. 软件的安装非常简单,在这里需要提醒大家的是,一定要在安装时勾选上“Enable Camtasia Studio Add-in for Microsoft PowerPoint”复选框以便为PowerPoint安装转换插件,如图7所示。
|
图7 |
2. 等安装完毕以后,打开PowerPoint调入待转换文档。这时,我们可以发现在PowerPoint工具栏处已经多出一个Camtasia快捷录制栏了,如图8所示。
|
图8 |
3. 剩下的操作就和上文谈到的PDF转换大体相同了。点击工具栏中最后一个按钮可以对转换过程进行设置,而如果我们没有特殊要求时,直接点击第一个“录制”按钮即可实现转换了。
【小提示】软件默认是在转换时同时录制外部声音的,如果我们只想制作无声的Flash动画,那么就应该在录制时关闭工具栏中第2个“录制音频”按钮。
4. 等PPT文档录制结束后,软件会要求我们先将录制内容以方案的形式保存下来,而后会自动打开Camtasia Studio软件调入这集方案。在这里,如果我们不需特殊的设置,就可以直接点击“文件”菜单→“生成视频为”命令调出转换对话框。
5. 在对话框中,我们先将“视频格式”设置为“Flash(SWF/FLV) —— Macromedia Flash输出”一项,然后再点击“下一步”,准备设定Flash动画样式,如图9所示。
|
图9 |
在这里,软件总共提供给我们三种样式选择,其中“One Video with TOC”是在Flash动画的基础上增加了手工切换幻灯功能,从而最大程度上模拟了原始幻灯片效果,而剩余两个样式则基本就是界面上发生的一些变化了,如图10所示。
|
图10 |
6. 最后,当我们选择好一个Flash模板后,就可以点击“下一步”按钮获得需要的Flash动画文件了
(1)、你的计算机启动正常后,你在桌面双击“我的电脑”或者你可以点击“开始”找到“我的电脑”鼠标选中,并左健双击,在弹出的窗口,找到“控制面板”双击。
还有一种方法,就是你可以点击“开始”,找到“网络邻居”,选中并点击右健,点击“属性”
在这里我们就按照从“控制面板”进入后来介绍怎样设置IP地址、子网掩码、默认网关等网络参数吧。让我们进入到第二步吧。
(2)、在点击“控制面板”后,弹出的窗口选择“网络和Internet连接”图标,并双击打开
(3)、进入“网络与Internet连接”窗口后,选中“网络连接”并双击打开
(4)、进入“网络连接”窗口后,右健单击“本地连接”,在弹出的窗口选择“属性”并左健单击
(5)、选择“本地连接属性”对话框中的“Internet协议(TCP/IP)”项,并单击“属性”按钮
(6)、在“Internet 协议(TCP/IP)属性”对话框中,选择“使用下面的IP地址”选项,依次输入网络中心提供给你的IP地址(202.117.***.***)、子网掩码(255.255.255.***) 、默认网关(202.117.***.***);再选择“使用下面的DNS服务器地址”选项,添入网络DNS服务器地址(202.117.80.2)。
设置完这些参数后,点击“确定”按钮,退出所有窗口重新启动你的计算机,网络参数就设置完毕。
|
Excel经常会因为各种原因出现错误值标识,比如“#DIV/0!”、“#N/A”等等。怎样才能使这些错误值标识不再显示出来呢?
一、使用条件格式
首先选中包含错误值的单元格区域,点功能区“开始”选项卡“样式”功能组中的“条件格式”下方的小三角形,在弹出的菜单中点“突出显示单元格规则→其它规则”命令。
打开“新建格式规则”对话框。在“选择规则类型”列表中点“只为包含以下内容的单元格设置格式”,点“只为满足以下条件的单元格设置格式”下方的下拉按钮,在列表中选择“错误”。
点右下方的“格式”按钮。打开“设置单元格格式”对话框,单击“字体”选项卡,点“颜色”下拉按钮,为单元格数值指定与背景相同的颜色,确定后就可以了。
我们也可以利用公式来设置条件格式。首先选中任意一个单元格(是否为错误值均可),如D3单元格,点“条件格式”功能按钮下方的小三角形,在弹出的菜单中点“新建规则”命令,打开如图2所示对话框。在上方的“选择规则类型”列表中选择“使用公式确定要设置格式的单元格”,在“为符合此公式的值设置格式”下方的输入框中输入公式“=ISERROR(D3)”。点“格式”按钮,在打开的对话框中设置的格式。
确定后选中该单元格(D3单元格),点功能区“开始”选项卡“剪帖板”功能组中的“格式刷”按钮,刷选其它要设置条件格式的单元格区域,将设置好的条件格式复制过去就可以了。
二、用IF函数和ISERROR函数
比如我们要用公式“=B2/A2”来计算B2单元格除以A2单元格所得的商。如果A2单元格为零或空值,就会显示“#DIV/0!”错误标识。但我们可以将该公式修改为“=IF(ISERROR(B2/A2),"", B2/A2)”,这样就不会有错误标识出现了。
ISERROR(B2/A2)的作用是判断B2/A2是否为任意错误值。如果是,那么就返回“True”,否则就返回“FALSE”。
IF函数的语法规则是IF(条件是否成立,条件成立时显示的结果,条件不成立时的显示结果)。所以,上例中=IF(ISERROR(B2/A2),"", B2/A2)其含义就是判断B2/A2是否返回错误值,如果是,那就显示””(不显示任何内容),如果不是,那么就显示B2/A2所得的结果。
三、用IFERROR函数
与上面的方法相比,IFERROR函数更为简单。假定我们仍然计算B2/A2。把公式写成“=IFERROR(B2/A2," ")”。那么,如果没有错误出现,就会显示B2/A2的结果;如果有错误产生,那么就不会显示任何内容。
经常使用Excel的朋友可能都会遇到一些看起来似懂非懂的错误值信息:例如# N/A!、#VALUE!、#DIV/O!等等,出现这些错误的原因有很多种,你真的了解它们吗,熟练掌握解决这些错误的方法吗?以下为大家介绍几种常见的错误及其解决方法。
1.#####!
如果单元格所含的数字、日期或时间比单元格宽,或者单元格的日期时间公式产生了一个负值,就会产生#####!。这个看起来比较简单,大家应该都了解吧。
解决方法:如果单元格所含的数字、日期或时间比单元格宽,可以通过拖动列表之间的宽度来修改列宽。如果使用的是1900年的日期系统,那么Excel中的日期和时间必须为正值。如果公式正确,也可以将单元格的格式改为非日期和时间型来显示该值。
2.#VALUE!
当使用错误的参数或运算对象类型时,或者当公式自动更正功能不能更正公式时,将产生错误值#VALUE!。这其中主要包括3点原因。
1)在需要数字或逻辑值时输入了文本,Excel不能将文本转换为正确的数据类型。
解决方法:确认公式或函数所需的运算符或参数正确,并且公式引用的单元格中包含有效的数值。例如:如果单元格A1包含一个数字,单元格A2包含文本,则公式="A1+A2"将返回错误值#VALUE!。可以用SUM工作表函数将这两个值相加(SUM函数忽略文本):=SUM(A1:A2)。
2)将单元格引用、公式或函数作为数组常量输入。
解决方法:确认数组常量不是单元格引用、公式或函数。
3)赋予需要单一数值的运算符或函数一个数值区域。
解决方法:将数值区域改为单一数值。修改数值区域,使其包含公式所在的数据行或列。
3.#DIV/O!
当公式被零除时,将会产生错误值#DIV/O!。在具体操作中主要表现为以下两种原因。
1)在公式中,除数使用了指向空单元格或包含零值单元格的单元格引用(在Excel中如果运算对象是空白单元格,Excel将此空值当作零值)。
解决方法:修改单元格引用,或者在用作除数的单元格中输入不为零的值。
2)输入的公式中包含明显的除数零,例如:公式=1/0。
解决方法:将零改为非零值。
4.#N/A
当在函数或公式中没有可用数值时,将产生错误值#N/A。
解决方法:如果工作表中某些单元格暂时没有数值,请在这些单元格中输入"#N/A",公式在引用这些单元格时,将不进行数值计算,而是返回#N/A。
5.#REF!
删除了由其他公式引用的单元格,或将移动单元格粘贴到由其他公式引用的单元格中。当单元格引用无效时将产生错误值#REF!。
解决方法:更改公式或者在删除或粘贴单元格之后,立即单击"撤消"按钮,以恢复工作表中的单元格。
6.#NUM!
当公式或函数中某个数字有问题时将产生错误值#NUM!。
1)在需要数字参数的函数中使用了不能接受的参数。
解决方法:确认函数中使用的参数类型正确无误。
2)由公式产生的数字太大或太小,Excel不能表示。
解决方法:修改公式,使其结果在有效数字范围之间。
7.#NULL!
使用了不正确的区域运算符或不正确的单元格引用。当试图为两个并不相交的区域指定交叉点时将产生错误值#NULL!。
解决方法:如果要引用两个不相交的区域,请使用联合运算符逗号(,)。公式要对两个区域求和,请确认在引用这两个区域时,使用逗号。如果没有使用逗号,Excel将试图对同时属于两个区域的单元格求和,由于A1:A13和c12:c23并不相交,它们没有共同的单元格所以就会出错。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>北京市工商局数据中心系统</title>
</head>
<frameset name="allframe" rows="59,40,100%" cols="*" framespacing="0" frameborder="no" border="0">
<frame src="top.html" name="topframe" scrolling="no" noresize="resize"/>
<frame src="menu.html" name="menuframe" scrolling="no" noresize="resize"/>
<frameset name="listset" rows="*" cols="168,8,100%" framespacing="0" frameborder="no" border="0">
<frame src="综合查询/menu.htm" name="leftFrame" scrolling="auto" noresize="resize" />
<frame src="left1.htm" name="leftFrame1" scrolling="No" noresize="resize"/>
<frame src="welcome.html" name="mainFrame"/>
</frameset>
</frameset>
<noframes><body>
</body>
</noframes></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>北京市工商局数据中心系统 登录</title>
<script language="javascript">
function openwindow()
{
window.open("index.html","_self");
}
</script>
<style type="text/css">
<!--
body {
background-image: url(web_login.jpg);
background-repeat: no-repeat;
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style></head>
<body scroll="no">
<table width="145" style="margin-left:530px; margin-top:250px; width:200px; height:60px;">
<tr>
<td width="160" height="30" align="left" valign="middle"><label>
<input name="text" type="text" id="username" size="16" maxlength="16" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle"><input name="textfield2" type="password" value="" size="16" /></td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" style="margin-left:485px; margin-top:35px; width:230px; height:30px;">
<tr>
<td><a href="#" onclick="openwindow();"><img src="btn0.jpg" border="0" /></a></td>
<td><img src="btn1.jpg" /></td>
</tr>
</table>
</body>
</html>
一、快速选中所有非空单元格:
在Excel中选中所有单元格比较容易,只需单击工作表左上角的行号(A、B、C……)行与列号(1、2、3、……)列的交叉空格,也可以按住左键拖选。但如果要在一个有几百几千行数据的工作表中选中所有有数据的单元格时,再去按住左键拖选就有点麻烦了,这时我们可以这样做:先在任意一个有数据的单元格中单击,然后按Ctrl+Shift+*键(先用一只手按住一个Ctrl键和一个Shift键不放开,再用另一只手按一下星号键)就能轻松搞定了。
二、快速打开所需工作表:
我们一般把许多数据相关的工作表建在一个工作簿中,且为查看方便,每个工作表的名都用汉字起得很长,由于受屏幕大小的限制,就造成了有许多工作表名称没有被显示出来,这时我们可以右键单击第一个工作表名前边的工作表选择按钮,再在弹出的菜单中选择你看不到的工作表。(如图1)
|
图1 |
四、打印行列号:
为了更加方便的查看数据及公式引用,有时需要把工作表的行号和列号也打印出来,如实施素质教育的今天,不准给学生排名次,但我们可以利用列号来查看学生的具体名次:单击“文件”→页面设置,在“页面设置”对话框中选择“工作表”选项卡,在“打印”项中把“行号列标”勾选上,点“确定”退出后再打印就可以了。(如图4)
|
图4 |
五、利用分页预览调整打印区域:
数据在打印输出之前一般要使用打印预览查看一下纸张是否够大,如果只多出一两行或一两列,则需返复调整,这时可以单击“视图”→分页预览,在分页预览模式下,直接按住左键拖动分页符(蓝色虚线)就可以了,调整完后再单击“视图”→普通,返回默认模式。(如图5)
|
图5 |
1、快速启动Excel
若您日常工作中要经常使用Excel,可以在启动Windows时启动它,设置方法:
(1)启动“我的电脑”进入Windows目录,依照路径“Start Menu\Programs\启动”来打开“启动”文件夹。
(2)打开Excel 所在的文件夹,用鼠标将Excel图标拖到“启动”文件夹,这时Excel的快捷方式就被复制到“启动”文件夹中,下次启动Windows就可快速启动Excel了。
若Windows已启动,您可用以下方法快速启动Excel。
方法一:双击“开始”菜单中的“文档”命令里的任一Excel工作簿即可。
方法二:用鼠标从“我的电脑”中将Excel应用程序拖到桌面上,然后从快捷菜单中选择“在当前位置创建快捷方式”以创建它的快捷方式,启动时只需双击其快捷方式即可。
2、快速获取帮助
对于工具栏或屏幕区,您只需按组合键Shift+F1,然后用鼠标单击工具栏按钮或屏幕区,它就会弹出一个帮助窗口,上面会告诉该元素的详细帮助信息。
3、快速移动或复制单元格
先选定单元格,然后移动鼠标指针到单元格边框上,按下鼠标左键并拖动到新位置,然后释放按键即可移动。若要复制单元格,则在释放鼠标之前按下Ctrl即可。
4、快速查找工作簿
您可以利用在工作表中的任何文字进行搜寻,方法为:
(1)单击工具栏中的“打开”按钮,在“打开”对话框里,输入文件的全名或部分名,可以用通配符代替;
(2)在“文本属性”编辑框中,输入想要搜寻的文字,最好是您认为是唯一的单词或短语,以便搜寻更容易成功;
(3)选择“开始查找”即可。在找到满足条件的文件前,“打开”对话框的状态栏都会显示“找到了0个文件”的信息,您应该耐心等待,只有当“打开”按钮由灰化状态变成可用状态时,才表明搜寻结束。
5、快速打印工作表
若选择“文件”菜单中“打印”命令来打印,会出现“打印”对话框让您选择,程序繁琐。若要跳过该对话框,您可以单击“常用”工具栏上的“打印”按钮或者按下Shift键并单击“打印预览”按钮,Excel将使用“选定工作表”选项打印。
6、快速切换工作表
按Ctrl+PageUp组合键可激活前一个工作表,按Ctrl+PageDown组合键可激活后一个工作表。您还可用鼠标去控制工作表底部的标签滚动按钮快速地移动工作表的名字,然后单击工作表进行切换。
7、快速切换工作簿
对于较少工作簿切换,可单击工作簿所在窗口。要对多个窗口下的多个工作进行切换,用“窗口”菜单最方便。“窗口”菜单的底部列出了已打开了工作簿的名字,要直接切换到一个工作簿,从“窗口”菜单选择它的名字即可。
“窗口”菜单最多能列出9个工作簿,若多于9个,“窗口”菜单则包含一个名为“多窗口”的命令,选用该命令,则出现一个按字母顺序列出所有已打开的工作簿名字的对话框,只需单击其中需要的名字即可。
8、快速插入Word表格
Excel可以处理Word表格中列出的数据,您可用以下方法快速插入Word表格:
(1)打开Word表格所在的文件;
(2)打开要处理Word表格的Excel文件,并调整好两窗口的位置,以便能看见表格和要插入表格的区域;
(3)选中Word中的表格;
(4)按住鼠标左键,将表格拖到Excel窗口中,松开鼠标左键将表格放在需要的位置即可。
9、快速链接网上的数据
您可以用以下方法快速建立与网上工作簿中数据的链接:
(1)打开Internet上含有需要链接数据的工作簿,并在工作簿选定数据,然后单击“编辑”菜单的“复制”命令;
(2)打开需要创建链接的Excel工作簿,在需要显示链接数据的区域中,单击左上角单元格;
(3)单击“编辑”菜单中的“选择性粘贴”命令,在“选择性粘贴”对话框中,选择“粘贴链接”按钮即可。若您想在创建链接时不打开Internet工作簿,可单击需要链接处的单元格,然后键入(=)和URL地址及工作簿位置,如:=http://www.Js.com/[filel.xls]。
10、快速创建工具栏
通过工具栏您可以快捷地访问常用的命令或自定义的宏,您可以根据需要快速创建自己的工具栏。方法为:单击“工具”菜单中的“自定义”命令,选择“工具栏”选项卡,单击“新建”按钮,输入“新建工具栏”名称,然后单击“确定”。这时新建工具栏出现在窗口,您就可以用鼠标把其他工具栏中的按钮拖到新建工具栏中,该按钮就会在此“落户”。若在拖动时按着Ctrl键,则会将按钮复制过来。注意:不能将按钮拖到“自定义”对话框或工作表中,否则该按钮将会被删除。
11、快速创建工作簿
模板是一用来作为创建其它工作簿的框架形式,利用它可以快速地创建相似的工作簿。创建模板方法为:
(1)打开一个要作为模板的工作簿;
(2)选择“文件”菜单中“另存为”命令,打开“另存为”对话框;
(3)在“文件名”框中输入模板的名字,从“保存类型”列表中选定“模板(*.xlt)”选项,这时“保存位置”会自动切换到默认的模板文件夹Templates文件夹;
(4)在“保存位置”中选择“电子表格模板”文件夹,单击“保存”即可。这样,您就可以根据该模板快速创建新工作簿了。
12、快速跳转到其它文件
用超级链接在各个位置之间跳转十分方便,若您要切换到其它文件,只需用鼠标指向带有下划线的蓝色超级链接文件,然后单击鼠标即可跳转到超级链接所指向的子位置上去,看完后若要返回,只需单击“Web”工具栏上的“返回”按钮即可。
Photoshop系统快捷键大全 |
日期:2006-12-23 11:28:07 人气: 433 [大 中 小] |
|
|
天极设计在线整理了如下的Photoshop的系统快捷键大全,希望帮助大家在设计学习和工作中事半功倍。
普通快速操作
F1 -帮助
F2 -剪切
F3 -拷贝
F4-粘贴
F5-隐藏/显示画笔面板
F6-隐藏/显示颜色面板
F7-隐藏/显示图层面板
F8-隐藏/显示信息面板
F9-隐藏/显示动作面板
F12-恢复
Shift+f5-填充
Shift+f6-羽化
Shift+f7-选择→反选
ctrl+h-隐藏选定区域
ctrl+d-取消选定区域
ctrl+w-关闭文件
ctrl+Q-退出PHOTOSHOP
Esc-取消操作
工具栏操作
矩形、椭圆选框工具 【M】
裁剪工具 【C】
移动工具 【V】
套索、多边形套索、磁性套索 【L】
魔棒工具 【W】
喷枪工具 【J】
画笔工具 【B】
像皮图章、图案图章 【S】
历史记录画笔工具 【Y】
像皮擦工具 【E】
铅笔、直线工具 【N】
模糊、锐化、涂抹工具 【R】
减淡、加深、海棉工具 【O】
钢笔、自由钢笔、磁性钢笔 【P】
添加锚点工具 【+】
删除锚点工具 【-】
直接选取工具 【A】
文字、文字蒙板、直排文字、直排文字蒙板 【T】
度量工具 【U】
直线渐变、径向渐变、对称渐变、角度渐变、菱形渐变 【G】
油漆桶工具 【K】
吸管、颜色取样器 【I】
抓手工具 【H】
缩放工具 【Z】
默认前景色和背景色 【D】
切换前景色和背景色 【X】
切换标准模式和快速蒙板模式 【Q】
标准屏幕模式、带有菜单栏的全屏模式、全屏模式 【F】
临时使用移动工具 【Ctrl】
临时使用吸色工具 【Alt】
临时使用抓手工具 【空格】
打开工具选项面板 【Enter】
快速输入工具选项(当前工具选项面板中至少有一个可调节数字) 【0】至【9】
循环选择画笔 【[】或【]】
选择第一个画笔 【Shift】+【[】
选择最后一个画笔 【Shift】+【]】
建立新渐变(在”渐变编辑器”中) 【Ctrl】+【N】
文件操作
新建图形文件 【Ctrl】+【N】
用默认设置创建新文件 【Ctrl】+【Alt】+【N】
打开已有的图像 【Ctrl】+【O】
打开为... 【Ctrl】+【Alt】+【O】
关闭当前图像 【Ctrl】+【W】
保存当前图像 【Ctrl】+【S】
另存为... 【Ctrl】+【Shift】+【S】
存储副本 【Ctrl】+【Alt】+【S】
页面设置 【Ctrl】+【Shift】+【P】
打印 【Ctrl】+【P】
打开“预置”对话框 【Ctrl】+【K】
显示最后一次显示的“预置”对话框 【Alt】+【Ctrl】+【K】
设置“常规”选项(在预置对话框中) 【Ctrl】+【1】
设置“存储文件”(在预置对话框中) 【Ctrl】+【2】
设置“显示和光标”(在预置对话框中) 【Ctrl】+【3】
设置“透明区域与色域”(在预置对话框中) 【Ctrl】+【4】
设置“单位与标尺”(在预置对话框中) 【Ctrl】+【5】
设置“参考线与网格”(在预置对话框中) 【Ctrl】+【6】
设置“增效工具与暂存盘”(在预置对话框中) 【Ctrl】+【7】
设置“内存与图像高速缓存”(在预置对话框中) 【Ctrl】+【8】
编辑操作
还原/重做前一步操作 【Ctrl】+【Z】
还原两步以上操作 【Ctrl】+【Alt】+【Z】
重做两步以上操作 【Ctrl】+【Shift】+【Z】
剪切选取的图像或路径 【Ctrl】+【X】或【F2】
拷贝选取的图像或路径 【Ctrl】+【C】
合并拷贝 【Ctrl】+【Shift】+【C】
将剪贴板的内容粘到当前图形中 【Ctrl】+【V】或【F4】
将剪贴板的内容粘到选框中 【Ctrl】+【Shift】+【V】
自由变换 【Ctrl】+【T】
应用自由变换(在自由变换模式下) 【Enter】
从中心或对称点开始变换 (在自由变换模式下) 【Alt】
限制(在自由变换模式下) 【Shift】
扭曲(在自由变换模式下) 【Ctrl】
取消变形(在自由变换模式下) 【Esc】
自由变换复制的象素数据 【Ctrl】+【Shift】+【T】
再次变换复制的象素数据并建立一个副本 【Ctrl】+【Shift】+【Alt】+【T】
删除选框中的图案或选取的路径 【DEL】
用背景色填充所选区域或整个图层 【Ctrl】+【BackSpace】或【Ctrl】+【Del】
用前景色填充所选区域或整个图层 【Alt】+【BackSpace】或【Alt】+【Del】
弹出“填充”对话框 【Shift】+【BackSpace】
从历史记录中填充 【Alt】+【Ctrl】+【Backspace】
图像调整
调整色阶 【Ctrl】+【L】
自动调整色阶 【Ctrl】+【Shift】+【L】
打开曲线调整对话框 【Ctrl】+【M】
在所选通道的曲线上添加新的点(‘曲线’对话框中) 在图象中【Ctrl】加点按
在复合曲线以外的所有曲线上添加新的点(‘曲线’对话框中) 【Ctrl】+【Shift】
加点按
移动所选点(‘曲线’对话框中) 【↑】/【↓】/【←】/【→】
以10点为增幅移动所选点以10点为增幅(‘曲线’对话框中) 【Shift】+【箭头】
选择多个控制点(‘曲线’对话框中) 【Shift】加点按
前移控制点(‘曲线’对话框中) 【Ctrl】+【Tab】
后移控制点(‘曲线’对话框中) 【Ctrl】+【Shift】+【Tab】
添加新的点(‘曲线’对话框中) 点按网格
删除点(‘曲线’对话框中) 【Ctrl】加点按点
取消选择所选通道上的所有点(‘曲线’对话框中) 【Ctrl】+【D】
使曲线网格更精细或更粗糙(‘曲线’对话框中) 【Alt】加点按网格
选择彩色通道(‘曲线’对话框中) 【Ctrl】+【~】
选择单色通道(‘曲线’对话框中) 【Ctrl】+【数字】
打开“色彩平衡”对话框 【Ctrl】+【B】
打开“色相/饱和度”对话框 【Ctrl】+【U】
全图调整(在色相/饱和度”对话框中) 【Ctrl】+【~】
只调整红色(在色相/饱和度”对话框中) 【Ctrl】+【1】
只调整黄色(在色相/饱和度”对话框中) 【Ctrl】+【2】
只调整绿色(在色相/饱和度”对话框中) 【Ctrl】+【3】
只调整青色(在色相/饱和度”对话框中) 【Ctrl】+【4】
只调整蓝色(在色相/饱和度”对话框中) 【Ctrl】+【5】
只调整洋红(在色相/饱和度”对话框中) 【Ctrl】+【6】
去色 【Ctrl】+【Shift】+【U】
反相 【Ctrl】+【I】
图层操作
从对话框新建一个图层 【Ctrl】+【Shift】+【N】
以默认选项建立一个新的图层 【Ctrl】+【Alt】+【Shift】+【N】
通过拷贝建立一个图层 【Ctrl】+【J】
通过剪切建立一个图层 【Ctrl】+【Shift】+【J】
与前一图层编组 【Ctrl】+【G】
取消编组 【Ctrl】+【Shift】+【G】
向下合并或合并联接图层 【Ctrl】+【E】
合并可见图层 【Ctrl】+【Shift】+【E】
盖印或盖印联接图层 【Ctrl】+【Alt】+【E】
盖印可见图层 【Ctrl】+【Alt】+【Shift】+【E】
将当前层下移一层 【Ctrl】+【[】
将当前层上移一层 【Ctrl】+【]】
将当前层移到最下面 【Ctrl】+【Shift】+【[】
将当前层移到最上面 【Ctrl】+【Shift】+【]】
激活下一个图层 【Alt】+【[】
激活上一个图层 【Alt】+【]】
激活底部图层 【Shift】+【Alt】+【[】
激活顶部图层 【Shift】+【Alt】+【]】
调整当前图层的透明度(当前工具为无数字参数的,如移动工具) 【0】至【9】
保留当前图层的透明区域(开关) 【/】
投影效果(在”效果”对话框中) 【Ctrl】+【1】
内阴影效果(在”效果”对话框中) 【Ctrl】+【2】
外发光效果(在”效果”对话框中) 【Ctrl】+【3】
内发光效果(在”效果”对话框中) 【Ctrl】+【4】
斜面和浮雕效果(在”效果”对话框中) 【Ctrl】+【5】
应用当前所选效果并使参数可调(在”效果”对话框中) 【A】
图层混合模式
循环选择混合模式 【Alt】+【-】或【+】
正常 【Ctrl】+【Alt】+【N】
阈值(位图模式) 【Ctrl】+【Alt】+【L】
溶解 【Ctrl】+【Alt】+【I】
背后 【Ctrl】+【Alt】+【Q】
清除 【Ctrl】+【Alt】+【R】
正片叠底 【Ctrl】+【Alt】+【M】
屏幕 【Ctrl】+【Alt】+【S】
叠加 【Ctrl】+【Alt】+【O】
柔光 【Ctrl】+【Alt】+【F】
强光 【Ctrl】+【Alt】+【H】
颜色减淡 【Ctrl】+【Alt】+【D】
颜色加深 【Ctrl】+【Alt】+【B】
变暗 【Ctrl】+【Alt】+【K】
变亮 【Ctrl】+【Alt】+【G】
差值 【Ctrl】+【Alt】+【E】
排除 【Ctrl】+【Alt】+【X】
色相 【Ctrl】+【Alt】+【U】
饱和度 【Ctrl】+【Alt】+【T】
颜色 【Ctrl】+【Alt】+【C】
光度 【Ctrl】+【Alt】+【Y】
去色 海棉工具+【Ctrl】+【Alt】+【J】
加色 海棉工具+【Ctrl】+【Alt】+【A】
暗调 减淡/加深工具+【Ctrl】+【Alt】+【W】
中间调 减淡/加深工具+【Ctrl】+【Alt】+【V】
高光 减淡/加深工具+【Ctrl】+【Alt】+【Z】
选择
全部选取 【Ctrl】+【A】
取消选择 【Ctrl】+【D】
重新选择 【Ctrl】+【Shift】+【D】
羽化选择 【Ctrl】+【Alt】+【D】
反向选择 【Ctrl】+【Shift】+【I】
路径变选区 数字键盘的【Enter】
载入选区 【Ctrl】+点按图层、路径、通道面板中的缩约图
滤镜
按上次的参数再做一次上次的滤镜 【Ctrl】+【F】
退去上次所做滤镜的效果 【Ctrl】+【Shift】+【F】
重复上次所做的滤镜(可调参数) 【Ctrl】+【Alt】+【F】
选择工具(在“3D变化”滤镜中) 【V】
立方体工具(在“3D变化”滤镜中) 【M】
球体工具(在“3D变化”滤镜中) 【N】
柱体工具(在“3D变化”滤镜中) 【C】
轨迹球(在“3D变化”滤镜中) 【R】
全景相机工具(在“3D变化”滤镜中) 【E】
视图操作
显示彩色通道 【Ctrl】+【~】
显示单色通道 【Ctrl】+【数字】
显示复合通道 【~】
以CMYK方式预览(开关) 【Ctrl】+【Y】
打开/关闭色域警告 【Ctrl】+【Shift】+【Y】
放大视图 【Ctrl】+【+】
缩小视图 【Ctrl】+【-】
满画布显示 【Ctrl】+【0】
实际象素显示 【Ctrl】+【Alt】+【0】
向上卷动一屏 【PageUp】
向下卷动一屏 【PageDown】
向左卷动一屏 【Ctrl】+【PageUp】
向右卷动一屏 【Ctrl】+【PageDown】
向上卷动10 个单位 【Shift】+【PageUp】
向下卷动10 个单位 【Shift】+【PageDown】
向左卷动10 个单位 【Shift】+【Ctrl】+【PageUp】
向右卷动10 个单位 【Shift】+【Ctrl】+【PageDown】
将视图移到左上角 【Home】
将视图移到右下角 【End】
显示/隐藏选择区域 【Ctrl】+【H】
显示/隐藏路径 【Ctrl】+【Shift】+【H】
显示/隐藏标尺 【Ctrl】+【R】
显示/隐藏参考线 【Ctrl】+【;】
显示/隐藏网格 【Ctrl】+【”】
贴紧参考线 【Ctrl】+【Shift】+【;】
锁定参考线 【Ctrl】+【Alt】+【;】
贴紧网格 【Ctrl】+【Shift】+【”】
显示/隐藏“画笔”面板 【F5】
显示/隐藏“颜色”面板 【F6】
显示/隐藏“图层”面板 【F7】
显示/隐藏“信息”面板 【F8】
显示/隐藏“动作”面板 【F9】
显示/隐藏所有命令面板 【TAB】
显示或隐藏工具箱以外的所有调板 【Shift】+【TAB】
文字处理(在”文字工具”对话框中)
左对齐或顶对齐 【Ctrl】+【Shift】+【L】
中对齐 【Ctrl】+【Shift】+【C】
右对齐或底对齐 【Ctrl】+【Shift】+【R】
左/右选择 1 个字符 【Shift】+【←】/【→】
下/上选择 1 行 【Shift】+【↑】/【↓】
选择所有字符 【Ctrl】+【A】
选择从插入点到鼠标点按点的字符 【Shift】加点按
左/右移动 1 个字符 【←】/【→】
下/上移动 1 行 【↑】/【↓】
左/右移动1个字 【Ctrl】+【←】/【→】
将所选文本的文字大小减小2 点象素 【Ctrl】+【Shift】+【[$lt]】
将所选文本的文字大小增大2 点象素 【Ctrl】+【Shift】+【[$gt]】
将所选文本的文字大小减小10 点象素 【Ctrl】+【Alt】+【Shift】+【[$lt]】
将所选文本的文字大小增大10 点象素 【Ctrl】+【Alt】+【Shift】+【[$gt]】
将行距减小2点象素 【Alt】+【↓】
将行距增大2点象素 【Alt】+【↑】
将基线位移减小2点象素 【Shift】+【Alt】+【↓】
将基线位移增加2点象素 【Shift】+【Alt】+【↑】
将字距微调或字距调整减小20/1000ems 【Alt】+【←】
将字距微调或字距调整增加20/1000ems 【Alt】+【→】
将字距微调或字距调整减小100/1000ems 【Ctrl】+【Alt】+【←】
将字距微调或字距调整增加100/1000ems 【Ctrl】+【Alt】+【→】
|
摘要: Datastage的使用心得及unix应用
Datastage是Ascential公司出品的著名第三方ETL工具。它的主要特点有:
1.可视化操作截面,避免了大量的手工code
2.第三方工具,善于处理复杂的数据源
3.可监控性好,能够快速发现ETL中的问题并解决
对于Datastage的初学者来说,通过学习官方培训资料(网... 阅读全文
最近项目中要遇到一个问题:http://blog.csdn.net/scottxie1980/archive/2006/12/06/1432543.aspx
使用DataStage将数据源文件数据导入到DB2中时,发现有个别中文字缺失。
当时第一反应是DataStage中字符集设置不正确。然而先后将Source,TargetTable,Job Properties的NLS更改后(几乎用遍了里面所提供的字符集 其中能在viewData时正确显示的是 MS936,None是忽略字符集即原来是什么样就是什么样。这个的话有时候会照成分隔符识别错误。),但是问题依旧。
看来不是DataStage的问题,因为在选择MS936时 ViewData是可以正确显示哪些缺失的中文字的。由于项目中DataStage是装在AIX上的,怀疑是AIX字符集设置问题。或者是DB本身的字符集不支持。
作个试验,使用本地windows上的DataStage向同一个DB中插入相同的文本数据,ok,中文无缺失。那么就排除了DB不字符集不支持的情况。将该文本copy到AIX上,用vi打开。果然那些中文字无法正常显示。
经多方求教,得出结论。DataStage在将数据插入到DB前,先用其所在的机器上的DB Client进行字符集转换。而DBClient所用的字符集又是其所在操作系统上的。所以才会有AIX上插入时有中文缺失,而在windows平台上往DB插入,无此类情况发生。
做数据仓库系统,ETL是关键的一环。说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具。回忆 一下工作这么些年来,处理数据迁移、转换的工作倒还真的不少。但是那些工作基本上是一次性工作或者很小数据量,使用access、DTS或是自己编个小程 序搞定。可是在数据仓库系统中,ETL上升到了一定的理论高度,和原来小打小闹的工具使用不同了。究竟什么不同,从名字上就可以看到,人家已经将倒数据的 过程分成3个步骤,E、T、L分别代表抽取、转换和装载。
其实ETL过程就是数据流动的过程,从不同的数据源流向不同的目标数据。但在数据仓库中,ETL有几个特点,一是数据同步,它不是一次性倒完数据就拉到, 它是经常性的活动,按照固定周期运行的,甚至现在还有人提出了实时ETL的概念。二是数据量,一般都是巨大的,值得你将数据流动的过程拆分成E、T和L。
现在有很多成熟的工具提供ETL功能,例如datastage、powermart等,且不说他们的好坏。从应用角度来说,ETL的过程其实不是非常复 杂,这些工具给数据仓库工程带来和很大的便利性,特别是开发的便利和维护的便利。但另一方面,开发人员容易迷失在这些工具中。举个例子,VB是一种非常简 单的语言并且也是非常易用的编程工具,上手特别快,但是真正VB的高手有多少?微软设计的产品通常有个原则是“将使用者当作傻瓜”,在这个原则下,微软的 东西确实非常好用,但是对于开发者,如果你自己也将自己当作傻瓜,那就真的傻了。ETL工具也是一样,这些工具为我们提供图形化界面,让我们将主要的精力 放在规则上,以期提高开发效率。从使用效果来说,确实使用这些工具能够非常快速地构建一个job来处理某个数据,不过从整体来看,并不见得他的整体效率会 高多少。问题主要不是出在工具上,而是在设计、开发人员上。他们迷失在工具中,没有去探求ETL的本质。
可以说这些工具应用了这么长时间,在这么多项目、环境中应用,它必然有它成功之处,它必定体现了ETL的本质。如果我们不透过表面这些工具的简单使用去看 它背后蕴涵的思想,最终我们作出来的东西也就是一个个独立的job,将他们整合起来仍然有巨大的工作量。大家都知道“理论与实践相结合”,如果在一个领域 有所超越,必须要在理论水平上达到一定的高度
探求ETL本质之一
ETL的过程就是数据流动的过程,从不同异构数据源流向统一的目标数据。其间,数据的抽取、清洗、转换和装载形成串行或并行的过程。ETL的核心还是在于 T这个过程,也就是转换,而抽取和装载一般可以作为转换的输入和输出,或者,它们作为一个单独的部件,其复杂度没有转换部件高。和OLTP系统中不同,那 里充满这单条记录的insert、update和select等操作,ETL过程一般都是批量操作,例如它的装载多采用批量装载工具,一般都是DBMS系 统自身附带的工具,例如Oracle SQLLoader和DB2的autoloader等。
ETL本身有一些特点,在一些工具中都有体现,下面以datastage和powermart举例来说。
1、静态的ETL单元和动态的ETL单元实例;一次转换指明了某种格式的数据如何格式化成另一种格式的数据,对于数据源的物理形式在设计时可以不用指定, 它可以在运行时,当这个ETL单元创建一个实例时才指定。对于静态和动态的ETL单元,Datastage没有严格区分,它的一个Job就是实现这个功 能,在早期版本,一个Job同时不能运行两次,所以一个Job相当于一个实例,在后期版本,它支持multiple instances,而且还不是默认选项。Powermart中将这两个概念加以区分,静态的叫做Mapping,动态运行时叫做Session。
2、ETL元数据;元数据是描述数据的数据,他的含义非常广泛,这里仅指ETL的元数据。主要包括每次转换前后的数据结构和转换的规则。ETL元数据还包 括形式参数的管理,形式参数的ETL单元定义的参数,相对还有实参,它是运行时指定的参数,实参不在元数据管理范围之内。
3、数据流程的控制;要有可视化的流程编辑工具,提供流程定义和流程监控功能。流程调度的最小单位是ETL 单元实例,ETL单元是不能在细分的ETL过程,当然这由开发者来控制,例如可以将抽取、转换放在一个ETL单元中,那样这个抽取和转换只能同时运行,而 如果将他们分作两个单元,可以分别运行,这有利于错误恢复操作。当然,ETL单元究竟应该细分到什么程度应该依据具体应用来看,目前还没有找到很好的细分 策略。比如,我们可以规定将装载一个表的功能作为一个ETL单元,但是不可否认,这样的ETL单元之间会有很多共同的操作,例如两个单元共用一个Hash 表,要将这个Hash表装入内存两次。
4、转换规则的定义方法;提供函数集提供常用规则方法,提供规则定义语言描述规则。
5、对数据的快速索引;一般都是利用Hash技术,将参照关系表提前装入内存,在转换时查找这个hash表。Datastage中有Hash文件技术,Powermart也有类似的Lookup功能。
探求ETL本质之二(分类)
昨在IT-Director上阅读一篇报告,关于ETL产品分类的。一般来说,我们眼中的ETL工具都是价格昂贵,能够处理海量数据的家伙,但是这是其中的一种。它可以分成4种,针对不同的需求,主要是从转换规则的复杂度和数据量大小来看。它们包括
1、交互式运行环境,你可以指定数据源、目标数据,指定规则,立马ETL。这种交互式的操作无疑非常方便,但是只能适合小数据量和复杂度不高的ETL过 程,因为一旦规则复杂了,可能需要语言级的描述,不能简简单单拖拖拽拽就可以的。还有数据量的问题,这种交互式必然建立在解释型语言基础上,另外他的灵活 性必然要牺牲一定的性能为代价。所以如果要处理海量数据的话,每次读取一条记录,每次对规则进行解释执行,每次在写入一条记录,这对性能影响是非常大的。
2、专门编码型的,它提供了一个基于某种语言的程序框架,你可以不必将编程精力放在一些周边的功能上,例如读文件功能、写数据库的功能,而将精力主要放在 规则的实现上面。这种近似手工代码的性能肯定是没话说,除非你的编程技巧不过关(这也是不可忽视的因素之一)。对于处理大数据量,处理复杂转换逻辑,这种 方式的ETL实现是非常直观的。
3、代码生成器型的,它就像是一个ETL代码生成器,提供简单的图形化界面操作,让你拖拖拽拽将转换规则都设定好,其实他的后台都是生成基于某种语言的程 序,要运行这个ETL过程,必须要编译才行。Datastage就是类似这样的产品,设计好的job必须要编译,这避免了每次转换的解释执行,但是不知道 它生成的中间语言是什么。以前我设计的ETL工具大挪移其实也是归属于这一类,它提供了界面让用户编写规则,最后生成C++语言,编译后即可运行。这类工 具的特点就是要在界面上下狠功夫,必须让用户轻松定义一个ETL过程,提供丰富的插件来完成读、写和转换函数。大挪移在这方面就太弱了,规则必须手写,而 且要写成标准c++语法,这未免还是有点难为最终用户了,还不如做成一个专业编码型的产品呢。另外一点,这类工具必须提供面向专家应用的功能,因为它不可 能考虑到所有的转换规则和所有的读写,一方面提供插件接口来让第三方编写特定的插件,另一方面还有提供特定语言来实现高级功能。例如Datastage提 供一种类Basic的语言,不过他的Job的脚本化实现好像就做的不太好,只能手工绘制job,而不能编程实现Job。
4、最后还有一种类型叫做数据集线器,顾名思义,他就是像Hub一样地工作。将这种类型分出来和上面几种分类在标准上有所差异,上面三种更多指ETL实现 的方法,此类主要从数据处理角度。目前有一些产品属于EAI(Enterprise Application Integration),它的数据集成主要是一种准实时性。所以这类产品就像Hub一样,不断接收各种异构数据源来的数据,经过处理,在实施发送到不同 的目标数据中去。
虽然,这些类看似各又千秋,特别在BI项目中,面对海量数据的ETL时,中间两种的选择就开始了,在选择过程中,必须要考虑到开发效率、维护方面、性能、学习曲线、人员技能等各方面因素,当然还有最重要也是最现实的因素就是客户的意象。
探求ETL本质之三(转换)
ETL探求之一中提到,ETL过程最复杂的部分就是T,这个转换过程,T过程究竟有哪些类型呢?
一、宏观输入输出
从对数据源的整个宏观处理分,看看一个ETL过程的输入输出,可以分成下面几类:
1、大小交,这种处理在数据清洗过程是常见了,例如从数据源到ODS阶段,如果数据仓库采用维度建模,而且维度基本采用代理键的话,必然存在代码到此键值 的转换。如果用SQL实现,必然需要将一个大表和一堆小表都Join起来,当然如果使用ETL工具的话,一般都是先将小表读入内存中再处理。这种情况,输 出数据的粒度和大表一样。
2、大大交,大表和大表之间关联也是一个重要的课题,当然其中要有一个主表,在逻辑上,应当是主表Left Join辅表。大表之间的关联存在最大的问题就是性能和稳定性,对于海量数据来说,必须有优化的方法来处理他们的关联,另外,对于大数据的处理无疑会占用 太多的系统资源,出错的几率非常大,如何做到有效错误恢复也是个问题。对于这种情况,我们建议还是尽量将大表拆分成适度的稍小一点的表,形成大小交的类 型。这类情况的输出数据粒度和主表一样。
3、站着进来,躺着出去。事务系统中为了提高系统灵活性和扩展性,很多信息放在代码表中维护,所以它的“事实表”就是一种窄表,而在数据仓库中,通常要进 行宽化,从行变成列,所以称这种处理情况叫做“站着进来,躺着出去”。大家对Decode肯定不陌生,这是进行宽表化常见的手段之一。窄表变宽表的过程主 要体现在对窄表中那个代码字段的操作。这种情况,窄表是输入,宽表是输出,宽表的粒度必定要比窄表粗一些,就粗在那个代码字段上。
4、聚集。数据仓库中重要的任务就是沉淀数据,聚集是必不可少的操作,它是粗化数据粒度的过程。聚集本身其实很简单,就是类似SQL中Group by的操作,选取特定字段(维度),对度量字段再使用某种聚集函数。但是对于大数据量情况下,聚集算法的优化仍是探究的一个课题。例如是直接使用SQL的 Group by,还是先排序,在处理。
二、微观规则
从数据的转换的微观细节分,可以分成下面的几个基本类型,当然还有一些复杂的组合情况,例如先运算,在参照转换的规则,这种基于基本类型组合的情况就不在此列了。ETL的规则是依赖目标数据的,目标数据有多少字段,就有多少条规则。
1、直接映射,原来是什么就是什么,原封不动照搬过来,对这样的规则,如果数据源字段和目标字段长度或精度不符,需要特别注意看是否真的可以直接映射还是需要做一些简单运算。
2、字段运算,数据源的一个或多个字段进行数学运算得到的目标字段,这种规则一般对数值型字段而言。
3、参照转换,在转换中通常要用数据源的一个或多个字段作为Key,去一个关联数组中去搜索特定值,而且应该只能得到唯一值。这个关联数组使用Hash算法实现是比较合适也是最常见的,在整个ETL开始之前,它就装入内存,对性能提高的帮助非常大。
4、字符串处理,从数据源某个字符串字段中经常可以获取特定信息,例如身份证号。而且,经常会有数值型值以字符串形式体现。对字符串的操作通常有类型转换、字符串截取等。但是由于字符类型字段的随意性也造成了脏数据的隐患,所以在处理这种规则的时候,一定要加上异常处理。
5、空值判断,对于空值的处理是数据仓库中一个常见问题,是将它作为脏数据还是作为特定一种维成员?这恐怕还要看应用的情况,也是需要进一步探求的。但是 无论怎样,对于可能有NULL值的字段,不要采用“直接映射”的规则类型,必须对空值进行判断,目前我们的建议是将它转换成特定的值。
6、日期转换,在数据仓库中日期值一般都会有特定的,不同于日期类型值的表示方法,例如使用8位整型20040801表示日期。而在数据源中,这种字段基本都是日期类型的,所以对于这样的规则,需要一些共通函数来处理将日期转换为8位日期值、6位月份值等。
7、日期运算,基于日期,我们通常会计算日差、月差、时长等。一般数据库提供的日期运算函数都是基于日期型的,而在数据仓库中采用特定类型来表示日期的话,必须有一套自己的日期运算函数集。
8、聚集运算,对于事实表中的度量字段,他们通常是通过数据源一个或多个字段运用聚集函数得来的,这些聚集函数为SQL标准中,包括sum,count,avg,min,max。
9、既定取值,这种规则和以上各种类型规则的差别就在于它不依赖于数据源字段,对目标字段取一个固定的或是依赖系统的值。
探求ETL本质之四(数据质量)
“不要绝对的数据准确,但要知道为什么不准确。”
这是我们在构建BI系统是对数据准确性的要求。确实,对绝对的数据准确谁也没有把握,不仅是系统集成商,包括客户也是无法确定。准确的东西需要一个标准, 但首先要保证这个标准是准确的,至少现在还没有这样一个标准。客户会提出一个相对标准,例如将你的OLAP数据结果和报表结果对比。虽然这是一种不太公平 的比较,你也只好认了吧。
首先在数据源那里,已经很难保证数据质量了,这一点也是事实。在这一层有哪些可能原因导致数据质量问题?可以分为下面几类:
1、数据格式错误,例如缺失数据、数据值超出范围或是数据格式非法等。要知道对于同样处理大数据量的数据源系统,他们通常会舍弃一些数据库自身的检查机 制,例如字段约束等。他们尽可能将数据检查在入库前保证,但是这一点是很难确保的。这类情况诸如身份证号码、手机号、非日期类型的日期字段等。
2、数据一致性,同样,数据源系统为了性能的考虑,会在一定程度上舍弃外键约束,这通常会导致数据不一致。例如在帐务表中会出现一个用户表中没有的用户ID,在例如有些代码在代码表中找不到等。
3、业务逻辑的合理性,这一点很难说对与错。通常,数据源系统的设计并不是非常严谨,例如让用户开户日期晚于用户销户日期都是有可能发生的,一个用户表中存在多个用户ID也是有可能发生的。对这种情况,有什么办法吗?
构建一个BI系统,要做到完全理解数据源系统根本就是不可能的。特别是数据源系统在交付后,有更多维护人员的即兴发挥,那更是要花大量的时间去寻找原因。 以前曾经争辩过设计人员对规则描述的问题,有人提出要在ETL开始之前务必将所有的规则弄得一清二楚。我并不同意这样的意见,倒是认为在ETL过程要有处 理这些质量有问题数据的保证。一定要正面这些脏数据,是丢弃还是处理,无法逃避。如果没有质量保证,那么在这个过程中,错误会逐渐放大,抛开数据源质量问 题,我们再来看看ETL过程中哪些因素对数据准确性产生重大影响。
1、规则描述错误。上面提到对设计人员对数据源系统理解的不充分,导致规则理解错误,这是一方面。另一方面,是规则的描述,如果无二义性地描述规则也是要 探求的一个课题。规则是依附于目标字段的,在探求之三中,提到规则的分类。但是规则总不能总是用文字描述,必须有严格的数学表达方式。我甚至想过,如果设 计人员能够使用某种规则语言来描述,那么我们的ETL单元就可以自动生成、同步,省去很多手工操作了。
2、ETL开发错误。即时规则很明确,ETL开发的过程中也会发生一些错误,例如逻辑错误、书写错误等。例如对于一个分段值,开区间闭区间是需要指定的,但是常常开发人员没注意,一个大于等于号写成大于号就导致数据错误。
3、人为处理错误。在整体ETL流程没有完成之前,为了图省事,通常会手工运行ETL过程,这其中一个重大的问题就是你不会按照正常流程去运行了,而是按照自己的理解去运行,发生的错误可能是误删了数据、重复装载数据等。
探求ETL本质之五(质量保证)
上回提到ETL数据质量问题,这是无法根治的,只能采取特定的手段去尽量避免,而且必须要定义出度量方法来衡量数据的质量是好还是坏。对于数据源的质量, 客户对此应该更加关心,如果在这个源头不能保证比较干净的数据,那么后面的分析功能的可信度也都成问题。数据源系统也在不断进化过程中,客户的操作也在逐 渐规范中,BI系统也同样如此。本文探讨一下对数据源质量和ETL处理质量的应对方法。
如何应对数据源的质量问题?记得在onteldatastage列表中也讨论过一个话题-"-1的处理",在数据仓库模型维表中,通常有一条-1记录,表 示“未知”,这个未知含义可广了,任何可能出错的数据,NULL数据甚至是规则没有涵盖到的数据,都转成-1。这是一种处理脏数据的方法,但这也是一种掩 盖事实的方法。就好像写一个函数FileOpen(filename),返回一个错误码,当然,你可以只返回一种错误码,如-1,但这是一种不好的设计, 对于调用者来说,他需要依据这个错误码进行某些判断,例如是文件不存在,还是读取权限不够,都有相应的处理逻辑。数据仓库中也是一样,所以,建议将不同的 数据质量类型处理结果分别转换成不同的值,譬如,在转换后,-1表示参照不上,-2表示NULL数据等。不过这仅仅对付了上回提到的第一类错误,数据格式 错误。对于数据一致性和业务逻辑合理性问题,这仍有待探求。但这里有一个原则就是“必须在数据仓库中反应数据源的质量”。
对于ETL过程中产生的质量问题,必须有保障手段。从以往的经验看,没有保障手段给实施人员带来麻烦重重。实施人员对于反复装载数据一定不会陌生,甚至是 最后数据留到最后的Cube,才发现了第一步ETL其实已经错了。这个保障手段就是数据验证机制,当然,它的目的是能够在ETL过程中监控数据质量,产生 报警。这个模块要将实施人员当作是最终用户,可以说他们是数据验证机制的直接收益者。
首先,必须有一个对质量的度量方法,什么是高质什么是低质,不能靠感官感觉,但这却是在没有度量方法条件下通常的做法。那经营分析系统来说,联通总部曾提 出测试规范,这其实就是一种度量方法,例如指标的误差范围不能高于5%等,对系统本身来说其实必须要有这样的度量方法,先不要说这个度量方法是否科学。对 于ETL数据处理质量,他的度量方法应该比联通总部测试规范定义的方法更要严格,因为他更多将BI系统看作一个黑盒子,从数据源到展现的数据误差允许一定 的误差。而ETL数据处理质量度量是一种白盒的度量,要注重每一步过程。因此理论上,要求输入输出的指标应该完全一致。但是我们必须正面完全一致只是理 想,对于有误差的数据,必须找到原因。
在质量度量方法的前提下,就可以建立一个数据验证框架。此框架依据总量、分量数据稽核方法,该方法在高的《数据仓库中的数据稽核技术》一文中已经指出。作为补充,下面提出几点功能上的建议:
1、提供前端。将开发实施人员当作用户,同样也要为之提供友好的用户界面。《稽核技术》一文中指出测试报告的形式,这种形式还是要依赖人为判断,在一堆数 据中去找规律。到不如用OLAP的方式提供界面,不光是加上测试统计出来的指标结果,并且配合度量方法的计算。例如误差率,对于误差率为大于0的指标,就 要好好查一下原因了。
2、提供框架。数据验证不是一次性工作,而是每次ETL过程中都必须做的。因此,必须有一个框架,自动化验证过程,并提供扩展手段,让实施人员能够增加验 证范围。有了这样一个框架,其实它起到规范化操作的作用,开发实施人员可以将主要精力放在验证脚本的编写上,而不必过多关注验证如何融合到流程中,如何展 现等工作。为此,要设计一套表,类似于DM表,每次验证结果数据都记录其中,并且自动触发多维分析的数据装载、发布等。这样,实施人员可以在每次装载,甚 至在流程过程中就可以观察数据的误差率。特别是,如果数据仓库的模型能够统一起来,甚至数据验证脚本都可以确定下来,剩下的就是规范流程了。
3、规范流程。上回提到有一种ETL数据质量问题是由于人工处理导致的,其中最主要原因还是流程不规范。开发实施人员运行单独一个ETL单元是很方便的, 虽然以前曾建议一个ETL单元必须是“可重入”的,这能够解决误删数据,重复装载数据问题。但要记住数据验证也是在流程当中,要让数据验证能够日常运作, 就不要让实施者感觉到他的存在。总的来说,规范流程是提高实施效率的关键工作,这也是以后要继续探求的。
探求ETL本质之六(元数据漫谈)
对于元数据(Metadata)的定义到目前为止没有什么特别精彩的,这个概念非常广,一般都是这样定义,“元数据是描述数据的数据(Data about Data)”,这造成一种递归定义,就像问小强住在哪里,答,在旺财隔壁。按照这样的定义,元数据所描述的数据是什么呢?还是元数据。这样就可能有元元 元...元数据。我还听说过一种对元数据,如果说数据是一抽屉档案,那么元数据就是分类标签。那它和索引有什么区别?
元数据体现是一种抽象,哲学家从古至今都在抽象这个世界,力图找到世界的本质。抽象不是一层关系,它是一种逐步由具体到一般的过程。例如我->男人 ->人->哺乳动物->生物这就是一个抽象过程,你要是在软件业混会发现这个例子很常见,面向对象方法就是这样一种抽象过程。它对世界 中的事物、过程进行抽象,使用面向对象方法,构建一套对象模型。同样在面向对象方法中,类是对象的抽象,接口又是对类的抽象。因此,我认为可以将“元”和 “抽象”换一下,叫抽象数据是不是好理解一些。
常听到这样的话,“xx领导的讲话高屋建瓴,给我们后面的工作指引的清晰的方向”,这个成语“高屋建瓴”,站在10楼往下到水,居高临下,能砸死人,这是 指站在一定的高度看待事物,这个一定的高度就是指他有够“元”。在设计模式中,强调要对接口编程,就是说你不要处理这类对象和那类对象的交互,而要处理这 个接口和那个接口的交互,先别管他们内部是怎么干的。
元数据存在的意义也在于此,虽然上面说了一通都撤到哲学上去,但这个词必须还是要结合软件设计中看,我不知道在别的领域是不是存在Metadata这样的 叫法,虽然我相信别的领域必然有类似的东东。元数据的存在就是要做到在更高抽象一层设计软件。这肯定有好处,什么灵活性啊,扩展性啊,可维护性啊,都能得 到提高,而且架构清晰,只是弯弯太多,要是从下往上看,太复杂了。很早以前,我曾看过backorifice的代码,我靠,一个简单的功能,从这个类转到 父类,又转到父类,很不理解,为什么一个简单的功能不在一个类的方法中实现就拉到了呢?现在想想,还真不能这样,这虽然使代码容易看懂了,但是结构确实混 乱的,那他只能干现在的事,如果有什么功能扩展,这些代码就废了。
我从98年刚工作时就开始接触元数据的概念,当时叫做元数据驱动的系统架构,后来在QiDSS中也用到这个 概念构建QiNavigator,但是现在觉得元数据也没啥,不就是建一堆表描述界面的元素,再利用这些数据自动生成界面吗。到了数据仓库系统中,这个概 念更强了,是数据仓库中一个重要的部分。但是至今,我还是认为这个概念过于玄乎,看不到实际的东西,市面上有一些元数据管理的东西,但是从应用情况就得 知,用的不多。之所以玄乎,就是因为抽象层次没有分清楚,关键就是对于元数据的分类(这种分类就是一种抽象过程)和元数据的使用。你可以将元数据抽象成0 和1,但是那样对你的业务有用吗?必须还得抽象到适合的程度,最后问题还是“度”。
数据仓库中的数据来自于多种业务数据源,这些数据源可能是不同硬件平台上,使用不同的操作系统,数据模型也相差很远,因而数据以不同的方式存在不同的数据库中。如何获取并向数据仓库加载这些数据量大、种类多的数据,已成为建立数据仓库所面临的一个关键问题。针对目前系统的数据来源复杂,而且分析应用尚未成型的现状,强烈推荐使用专业的数据抽取、转换和装载工具DataStage。
DataStage 是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据仓库目标数据库的集成工具。
DataStage 能够处理多种数据源的数据,包括主机系统的大型数据库、开放系统上的关系数据库和普通的文件系统等,以下列出它所能处理的主要数据源:
大型主机系统数据库:IMS,DB2,ADABAS,VSAM等
开放系统的关系数据库:Informix,Oracle,Sybase,DB2,Microsoft SQL Server等
ERP系统:SAP/R3,PeopleSoft系统等
普通文件和复杂文件系统,FTP文件系统,XML等
IIS,Netscape,Apache等Web服务器系统
Outlook等Email系统
DataStage可以从多个不同的业务系统中,从多个平台的数据源中抽取数据,完成转换和清洗,装载到各种系统里面。其中每步都可以在图形化工具里完成,同样可以灵活的被外部系统调度,提供专门的设计工具来设计转换规则和清洗规则等,实现了增量抽取、任务调度等多种复杂而实用的功能。其中简单的数据转换可以通过在界面上拖拉操作和调用一些DataStage预定义转换函数来实现,复杂转换可以通过编写脚本或结合其他语言的扩展来实现,并且DataStage提供调试环境,可以极大提高开发和调试抽取、转换程序的效率。
根据以往的项目实施经验,通常数据抽取工作分抽取、清洗、转换、装载几个步骤:
抽取主要是针对各个业务系统及不同网点的分散数据,充分理解数据定义后,规划需要的数据源及数据定义,制定可操作的数据源,制定增量抽取的定义。
清洗主要是针对系统的各个环节可能出现的数据二义性、重复、不完整、违反业务规则等问题,允许通过试抽取,将有问题的纪录先剔除出来,根据实际情况调整相应的清洗操作。
转换主要是针对数据仓库建立的模型,通过一系列的转换来实现将数据从业务模型到分析模型,通过内建的库函数、自定义脚本或其他的扩展方式,实现了各种复杂的转换,并且支持调试环境,清楚的监控数据转换的状态。
装载主要是将经过转换的数据装载到数据仓库里面,可以通过数据文件直接装载或直连数据库的方式来进行数据装载,可以充分体现高效性。在应用的时候可以随时调整数据抽取工作的运行方式,可以灵活的集成到其他管理系统中
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)作为BI/DW(Business Intelligence)的核心和灵魂,能够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤。如果说数据仓库的模型设计是一座大厦的设计蓝图,数据是砖瓦的话,那么ETL就是建设大厦的过程。在整个项目中最难部分是用户需求分析和模型设计,而ETL规则设计和实施则是工作量最大的,约占整个项目的60%~80%,这是国内外从众多实践中得到的普遍共识。
ETL是数据抽取(Extract)、转换(Transform)、清洗(Cleansing)、装载(Load)的过程。是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。
信息是现代企业的重要资源,是企业运用科学管理、决策分析的基础。目前,大多数企业花费大量的资金和时间来构建联机事务处理OLTP的业务系统和办公自动化系统,用来记录事务处理的各种相关数据。据统计,数据量每2~3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据量的2%~4%左右。因此,企业仍然没有最大化地利用已存在的数据资源,以致于浪费了更多的时间和资金,也失去制定关键商业决策的最佳契机。于是,企业如何通过各种技术手段,并把数据转换为信息、知识,已经成了提高其核心竞争力的主要瓶颈。而ETL则是主要的一个技术手段。如何正确选择ETL工具?如何正确应用ETL?
目前,ETL工具的典型代表有:Informatica、Datastage、OWB、微软DTS……
数据集成:快速实现ETL
ETL的质量问题具体表现为正确性、完整性、一致性、完备性、有效性、时效性和可获取性等几个特性。而影响质量问题的原因有很多,由系统集成和历史数据造成的原因主要包括:业务系统不同时期系统之间数据模型不一致;业务系统不同时期业务过程有变化;旧系统模块在运营、人事、财务、办公系统等相关信息的不一致;遗留系统和新业务、管理系统数据集成不完备带来的不一致性。
实现ETL,首先要实现ETL转换的过程。它可以集中地体现为以下几个方面:
空值处理 可捕获字段空值,进行加载或替换为其他含义数据,并可根据字段空值实现分流加载到不同目标库。
规范化数据格式 可实现字段格式约束定义,对于数据源中时间、数值、字符等数据,可自定义加载格式。
拆分数据 依据业务需求对字段可进行分解。例,主叫号 861084613409,可进行区域码和电话号码分解。
验证数据正确性 可利用Lookup及拆分功能进行数据验证。例如,主叫号861084613409,进行区域码和电话号码分解后,可利用Lookup返回主叫网关或交换机记载的主叫地区,进行数据验证。
数据替换 对于因业务因素,可实现无效数据、缺失数据的替换。
Lookup 查获丢失数据 Lookup实现子查询,并返回用其他手段获取的缺失字段,保证字段完整性。
建立ETL过程的主外键约束 对无依赖性的非法数据,可替换或导出到错误数据文件中,保证主键惟一记录的加载。
为了能更好地实现ETL,笔者建议用户在实施ETL过程中应注意以下几点:
第一,如果条件允许,可利用数据中转区对运营数据进行预处理,保证集成与加载的高效性;
第二,如果ETL的过程是主动“拉取”,而不是从内部“推送”,其可控性将大为增强;
第三,ETL之前应制定流程化的配置管理和标准协议;
第四,关键数据标准至关重要。目前,ETL面临的最大挑战是当接收数据时其各源数据的异构性和低质量。以电信为例,A系统按照统计代码管理数据,B系统按照账目数字管理,C系统按照语音ID管理。当ETL需要对这三个系统进行集成以获得对客户的全面视角时,这一过程需要复杂的匹配规则、名称/地址正常化与标准化。而ETL在处理过程中会定义一个关键数据标准,并在此基础上,制定相应的数据接口标准。
ETL过程在很大程度上受企业对源数据的理解程度的影响,也就是说从业务的角度看数据集成非常重要。一个优秀的ETL设计应该具有如下功能:
管理简单;采用元数据方法,集中进行管理;接口、数据格式、传输有严格的规范;尽量不在外部数据源安装软件;数据抽取系统流程自动化,并有自动调度功能;抽取的数据及时、准确、完整;可以提供同各种数据系统的接口,系统适应性强;提供软件框架系统,系统功能改变时,应用程序很少改变便可适应变化;可扩展性强。
数据模型:标准定义数据
合理的业务模型设计对ETL至关重要。数据仓库是企业惟一、真实、可靠的综合数据平台。数据仓库的设计建模一般都依照三范式、星型模型、雪花模型,无论哪种设计思想,都应该最大化地涵盖关键业务数据,把运营环境中杂乱无序的数据结构统一成为合理的、关联的、分析型的新结构,而ETL则会依照模型的定义去提取数据源,进行转换、清洗,并最终加载到目标数据仓库中。
模型的重要之处在于对数据做标准化定义,实现统一的编码、统一的分类和组织。标准化定义的内容包括:标准代码统一、业务术语统一。ETL依照模型进行初始加载、增量加载、缓慢增长维、慢速变化维、事实表加载等数据集成,并根据业务需求制定相应的加载策略、刷新策略、汇总策略、维护策略。
元数据:拓展新型应用
对业务数据本身及其运行环境的描述与定义的数据,称之为元数据(metadata)。元数据是描述数据的数据。从某种意义上说,业务数据主要用于支持业务系统应用的数据,而元数据则是企业信息门户、客户关系管理、数据仓库、决策支持和B2B等新型应用所不可或缺的内容。
元数据的典型表现为对象的描述,即对数据库、表、列、列属性(类型、格式、约束等)以及主键/外部键关联等等的描述。特别是现行应用的异构性与分布性越来越普遍的情况下,统一的元数据就愈发重要了。“信息孤岛”曾经是很多企业对其应用现状的一种抱怨和概括,而合理的元数据则会有效地描绘出信息的关联性。
而元数据对于ETL的集中表现为:定义数据源的位置及数据源的属性、确定从源数据到目标数据的对应规则、确定相关的业务逻辑、在数据实际加载前的其他必要的准备工作,等等,它一般贯穿整个数据仓库项目,而ETL的所有过程必须最大化地参照元数据,这样才能快速实现ETL。
ETL体系结构
下图为ETL体系结构,它体现了主流ETL产品框架的主要组成部分。ETL是指从源系统中提取数据,转换数据为一个标准的格式,并加载数据到目标数据存储区,通常是数据仓库。
ETL体系结构图
Design manager 提供一个图形化的映射环境,让开发者定义从源到目标的映射关系、转换、处理流程。设计过程的各对象的逻辑定义存储在一个元数据资料库中。
Meta data management 提供一个关于ETL设计和运行处理等相关定义、管理信息的元数据资料库。ETL引擎在运行时和其它应用都可参考此资料库中的元数据。
Extract 通过接口提取源数据,例如ODBC、专用数据库接口和平面文件提取器,并参照元数据来决定数据的提取及其提取方式。
Transform 开发者将提取的数据,按照业务需要转换为目标数据结构,并实现汇总。
Load 加载经转换和汇总的数据到目标数据仓库中,可实现SQL或批量加载。
Transport services 利用网络协议或文件协议,在源和目标系统之间移动数据,利用内存在ETL处理的各组件中移动数据。
Administration and operation 可让管理员基于事件和时间进行调度、运行、监测ETL作业、管理错误信息、从失败中恢复和调节从源系统的输出。
pop3 smtp 都是填写的公司邮箱的地址 而不是我认为的@后面的东西
<script language="javascript">
//查询待办事宜
function query()
{
document.all('result').style.display='';
}
//待办事宜:重填
function func_reset()
{
document.getElementById('qyzchQuery').value='';
document.getElementById('qymcQuery').value='';
document.getElementById('jbrQuery').value='';
document.getElementById('startDateQuery').value='';
document.getElementById('endDateQuery').value='';
}
//受理
function func_sl()
{
window.parent.parent.addTabPanel("30101010","普通设立登记","../bjgs/module/nzdj/sldj/sl/xsl/nzdj_sldj_sl_xsl_showQuerySl.html");
}
</script>
<script type="text/javascript">
var items=new Array();
var mainPanel = new Ext.TabPanel({
region:'center',
deferredRender:false,
activeTab:0,
items:[{
id:'mainPanel',
title: "主客体查询",
width:'100%',
height:'100%',
autoScroll:true,
html: '<iframe width="100%" name="mainFrame" height="100%" border="1" src="dbsyDetail/all.html"></iframe>'
},{
id:'mainPanel1',
title: "监管执法情况",
width:'100%',
height:'100%',
autoScroll:true,
html: '<iframe width="100%" name="mainFrame" height="100%" border="1" src="dbsyDetail/jgzfqk.html"></iframe>'
},{
id:'mainPanel2',
title: "统计分析",
width:'100%',
height:'100%',
autoScroll:true
},{
id:'mainPanel3',
title: "运行管理",
width:'100%',
height:'100%',
autoScroll:true
},{
id:'mainPanel4',
title: "元数据管理",
width:'100%',
height:'100%',
autoScroll:true
},{
id:'mainPanel5',
title: "系统管理",
width:'100%',
height:'100%',
autoScroll:true
}]
});
Ext.onReady(function(){
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
var viewport = new Ext.Viewport({
layout:'border',
items:[
mainPanel
]
});
});
</script>
<link rel="stylesheet" type="text/css" href="../framework/component/ext2.0/resources/css/ext-all.css"/> <script type="text/javascript" src="../framework/component/ext2.0/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../framework/component/ext2.0/ext-all-debug.js"></script>
<style type="text/css">
html, body {
font:normal 12px verdana;
margin:0;
padding:0;
border:0 none;
overflow:hidden;
height:100%;
}
p {
margin:5px;
}
#nameDiv
{
position:absolute;
text-align:center;
right:30px;
top:5px;
font-size:12px;
}
</style>
对数据库进行范式化处理具有以下的优点:
1. 因为表的列数减少了,所以搜索、排序、创建索引的速度可以加快。
2. 因为表减小了,所以按照索引查询的速度加快了。
3. 可以更好地使用段来控制数据的物理存储。
4. 每个表可以只有很少的索引,因此可以加快更新速度。
5. 可以减少空值和冗余,使数据库更紧凑。
6. 减少数据的不规则性。
范式化使数据库的维护和修改变得更容易
对数据库进行非范式化的目的在于提高应用程序的效率,但非范式化处理毕竟会增加数据冗余,带来相应的数据完整性问题。因此,在考虑非范式化处理时,要慎重考虑下面的几个问题:
1. 哪些是比较紧急的事务,哪些事务对响应时间有要求。
2. 这些事务的执行频率有多高。
3. 这些紧急的事务要操作哪些表以及表中的哪些列,每次要访问多少行。
4. 哪种类型的事务执行频率最高:查询、插入、删除还是更新。
5. 通常的排序顺序是什么。
6. 哪些工作会并发执行。
7. 经常访问的表有多大。
8. 哪些需要进行统计计算。
9. 数据的物理位置在哪里。
常用的非范式化技术有以下几种:
1. 增加冗余列。
2. 增加派生列。
3. 合并表。
4. 重复表。
5. 分割表(水平分割和垂直分割)。
[复制此代码]CODE:
MyEclipse 6.0.1 注册码
Subscriber: administrator
Subscription Code: nLR7ZL-655342-54657656405281154
注册后:
[复制此代码]CODE:
Subscriber: administrator
Product ID: E2MY (MyEclipse Standard Subscription)
License version: 1.0
Full Maintenance Included
Subscription expiration date (YYYYMMDD): 20091021
Number of licenses: 897
下面把 6.0GA / M1 和 5.5GA 版本的“注册信息”“注册码”“破解”给大家:
Subscriber: www.1cn.biz
Subscriber Code: jLR8ZC-655355-5450765457039125
或者
Subscriber: www.1cn.biz
Subscriber Code: jLR7ZL-655355-5450755330522962
适用于早期的 5.5 M2 版本的:
Subscriber: www.1cn.biz
Subscriber Code: jLR8ZC-956-55-5467865833584547
适用于早期的 5.1.1 GA 和 5.5 M1 版本的:
Subscriber: www.1cn.biz
Subscriber Code: jLR8ZC-444-55-4467865481680090
注册成功后会发现:
Subscriber:
www.1cn.biz
Product ID: E3MP (MyEclipse Professional Subscription)
License version: x.x
Full Maintenance Included
Subscription expiration date (YYYYMMDD): 20090520
Number of licenses: 800
本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/13458.htm
body {
font-family:verdana,tahoma,helvetica;
font-size:11.5px;
}
body .x-panel {
margin-bottom:20px;
}
td{
font-family:verdana,tahoma,helvetica;
font-size:11.5px;
}
.defaultButton
{
background: url(../../../images/style/default/button/button2.jpg) fixed repeat-x center center;
border-right: #5f88ef 1px solid;
border-bottom: #5f88ef 1px solid;
border-top: #5f88ef 1px solid;
border-left: #5f88ef 1px solid;
padding-left: 0px;
padding-bottom: 0px;
padding-right: 0px;
cursor: hand;
color: black;
padding-top: 2px;
font-family: "宋体";
font-size: 9pt;
height: 21px;
width: 60px;
text-align: center;
}
.wideButton
{
background: url(../../../images/style/default/button/button2.jpg) fixed repeat-x center center;
border-right: #5f88ef 1px solid;
border-bottom: #5f88ef 1px solid;
border-top: #5f88ef 1px solid;
border-left: #5f88ef 1px solid;
padding-left: 0px;
padding-bottom: 0px;
padding-right: 0px;
cursor: hand;
color: black;
padding-top: 2px;
font-family: "宋体";
font-size: 9pt;
height: 21px;
width: 100px;
text-align: center;
}
.titleFont
{
font-family:宋体;
font-size:12px;
font-weight:bold;
color: #10418c;
}
.gridTopLeft{
background-image:url(../../../images/style/default/grid/gridTopLeft.gif)!important;
}
.gridTopCenter{
background-image:url(../../../images/style/default/grid/gridTopCenter.gif)!important;
}
.gridTopRight{
background-image:url(../../../images/style/default/grid/gridTopRight.gif)!important;
}
.gridMiddleLeft{
background-image:url(../../../images/style/default/grid/gridMiddleLeft.gif)!important;
}
.gridBackgroundColor{
background-color:#d6dff7;
}
.gridBorderColor{
background-color:#9cbaef;
}
.formBorderColor{
background-color:#b5bace;
}
.gridWhiteColor{
background-color:#ffffff;
}
.gridButtonBack{
background-image:url(../../../images/style/default/grid/gridButtonBack.gif)!important;
}
.gridBottomLeft{
background-image:url(../../../images/style/default/grid/gridBottomLeft.gif)!important;
}
.gridBottomCenter{
background-image:url(../../../images/style/default/grid/gridBottomCenter.gif)!important;
}
.gridBottomRight{
background-image:url(../../../images/style/default/grid/gridButtonBack.gif)!important;
}
.gridMiddleRight{
background-image:url(../../../images/style/default/grid/gridMiddleRight.gif)!important;
}
.gridButtonBack{
background-image:url(../../../images/style/default/grid/gridButtonBack.gif)!important;
}
.gridRowBox{
background-image:url(../../../images/style/default/grid/gridRowBox.gif)!important;
}
.gridRow2{
background-color:#ececec;
}
.gridRowMouseOver{
background-image:url(../../../images/style/default/grid/gridRowMouseOver.gif)!important;
}
.gridRowMouseClick{
background-image:url(../../../images/style/default/grid/gridRowMouseClick.gif)!important;
}
.tabsBack{
background-image:url(../../../images/style/default/tab/tabsBack.gif)!important;
}
.tabLeft{
background-image:url(../../../images/style/default/tab/tabLeft.gif)!important;
}
.tabContent{
background-image:url(../../../images/style/default/tab/tabContent.gif)!important;
}
.tabRight{
background-image:url(../../../images/style/default/tab/tabRight.gif)!important;
}
.tabLeftDefault{
background-image:url(../../../images/style/default/tab/tabLeftDefault.gif)!important;
}
.tabContentDefault{
background-image:url(../../../images/style/default/tab/tabContentDefault.gif)!important;
}
.tabRightDefault{
background-image:url(../../../images/style/default/tab/tabRightDefault.gif)!important;
}
.icon-grid {
background-image:url(../../../images/icon/grid.png) !important;
}
.icon-form {
background-image:url(../../../images/icon/cog_edit.png) !important;
}
.add {
background-image:url(../../../images/icon/add.gif) !important;
}
.option {
background-image:url(../../../images/icon/plugin.gif) !important;
}
.remove {
background-image:url(../../../images/icon/delete.gif) !important;
}
.save {
background-image:url(../../../images/icon/save.gif) !important;
}
#msg-div {
position:absolute;
width:250px;
z-index:20000;
}
#tree-div{
margin:1px;
width:'100%';
height:'100%';
}
.folder .x-tree-node-icon{
background:transparent url(../resources/images/default/tree/folder.gif);
}
.x-tree-node-expanded .x-tree-node-icon{
background:transparent url(../resources/images/default/tree/folder-open.gif);
}
<!--按钮:开始-->
<table cellspacing='2' cellpadding='2' border="0" align="center">
<tr>
<td class="gridWhiteColor" height="32">
<table cellspacing='2' cellpadding='2' border="0" align="center">
<tr>
<td><input name="按钮" type = "button" class="defaultButton" value="上一步" onClick="goPrior1()"></td>
<td><input name="按钮" type = "button" class="defaultButton" value="下一步" onClick="goNext1()"></td>
</tr>
</table>
</td>
</tr>
</table>
一、网页设计类
-------------------------------
1。网站名称:有风的日子
网站地址:http://www.hellowind.com/
简介:
很不错的一个设计网站,我刚开始学习网页设计的时候就知道她了,她最有特色的内容就算是精品插件栏目了,里面包括有Photoshop 滤镜、Dreamweaver 插件、Flash 相关,都是很实用的好东东。同时网站的符号字体栏目也挺有自己的特色。
-------------------------------
2。网站名称:蓝色理想
网站地址:http://www.blueidea.com/
简介:
网页编辑方面的大哥大人物,网站关于网页制作方面的教程既全面又专业,而且各类教程的更新速度很快。她的经典论坛的人气也是相当的旺。同时该网站的一个很大的特点就是会时不时推出一些好书的介绍,这些都是不容易买到的。
-------------------------------
3。网站名称:七色鸟设计
网站地址:http://www.colorbird.com/
简介:
七色鸟设计是一个致力于传播设计文化,研究视觉设计艺术、提高大众审美意识的非盈利性的艺术指导网站,里面的设计资源相当丰富而且有特色
-------------------------------
4。网站名称:视觉中国
网站地址:http://www.chinavisual.com/
简介:
这个是我最爱的一个网站了,我第一次把网页制作和网页设计区分开来,就是通过看了这个网站上的很多文章得出来的,里面的很多知识以平面为主,以前她的服务器不怎么好,经常出现服务器负载过重的情况,但是现在已经好了。
-------------------------------
5。网站名称:5D多媒体
网站地址:http://www.5dmedia.com/
简介:
5D的含义是指其探讨五个方面的内容:声音、图象、动画、多媒体交互、Internet网开发。该网站是目前国内最大的多媒体技术站点,要想了解多媒体方面的信息还真的是要进去看看。
-------------------------------
6。网站名称:设计联盟
网站地址:http://www.szdesign.org/
简介:
我非常喜欢她的作品栏目,可以看到很多人的创作,欣赏别人的创作的同时,自己也可以得到很多的启示
-------------------------------
7。网站名称:点燃灵感
网站地址:http://www.fwcn.com/
简介:
这里是Firework的天堂,教程,插件,资源,应有尽有
二、酷站欣赏类
1。设计路上 http://www.design63.com.cn
PS:收藏量大,行业分类相对齐全!酷站按颜色分类,较有特色,更新及时!
2。我爱设计 http://52design.com
PS:知名设计站,可以给酷站评分!
3。68DESIGN http://68design.net
PS:更新速度和访问浏览都不错,另有其他韩国资源!
4。精品酷站 http://www.pickbar.com
PS:每个站都有截图,可以评论,站点审核很考究!
三、图象处理类
-------------------------------
1。网站名称:中国PHOTOSHOP联盟
网站地址:http://www.photoshopcn.com/
简介:
网页设计中的平面处理软件,PS是绝对的老大,中国PHOTOSHOP联盟就是PS教学方面的老大
-------------------------------
2。网站名称:图象谷
网站地址:http://pstxg.com/
简介:
搞图象处理的好去处,她的资源下载栏目很出色
四、动画设计类
1。网站名称:闪客帝国
网站地址:http://www.flashempire.com/
简介:
我很早以前做的第一个个人网站就是仿照该网站做的,呵呵,我记得那个时候的帝国还不是现在这个样子。里面关于Flash的教程都很经典。而且论坛里面是高手如云。
-------------------------------
2。网站名称:闪吧
网站地址:http://www.flash8.net/
简介:
我第一次知道这个网站是通过电脑爱好者介绍的,具体哪期忘记了,我记得有整整一个版面来介绍这个网站的故事,所以就跑来了,一看就喜欢上了,觉得里面的资料真是太丰富了,和帝国难分高下。
-------------------------------
3。网站名称:数码动力国际
网站地址:http://www.showgood.com/
简介:
该网站已经不需要我们再说,她推出的Flash实在是太棒了!
-------------------------------
4。网站名称:闪盟在线
网站地址:http://www.flashsun.com/
简介:
网站的优秀以不需多说,我很喜欢她的竞技场栏目
五、网页素材类
-------------------------------
1。网站名称:桌面城市
网站地址:http://www.deskcity.com/
简介:
一流的图象资料宝库
-------------------------------
2。网站名称:素材精品屋
网站地址:http://www.sucaiw.com/
简介:
也是网页设计素材库,她和桌面城市主要在于一个偏全,一个偏精!
六:网页代码类
1。网站名称:代码中国
网站地址:http://www.codechina.net
简介:
一个专业、全面的源代码下载网站。简洁实用的页面,专业详尽的分类,丰富全面的代码资源,合理的得体的技术运用,处处透露出专业性。无论哪一方面的代码,在这里几乎都找得到,而且在代码社区中,你可以发布一些求助信息,讨论一些技术话题,让你充分体会到网络的互动性。
2。网站名称:天新网源码下载
网站地址:http://www.21tx.com/src
简介:
天新网是一个较早的个人网站,也是提供源码下载较早的一个网站。分类较为详尽:首先按语言(或技术)分成大类,每一大类再按代码的用途分为小类,这样,使用起来方便快捷。
3。网站名称:波士源码下载
网站地址:http://www.boss8u8.com/scdown
简介:
主要提供WEB后台程序代码下载。尽管包含的类别有限,代码的丰富程度比不上前两个网站,但是它分类很详细,几乎包含了目前网站上常见的所有程序代码,如果你正在寻找一些WEB后台程序代码,这应该是个好去处。
七:web技术类
1。网站名称:goEway.com
网站地址:http://www.goeway.com
简介:
“从不懂得上网,到网络高手”,这是goEway.com的口号。当然,口号就是口号,重要的是,从这个站合理的栏目设置、人性化的设计、丰富的内容、大量实用的文章来看,他们在切切实实地这样做着。
2。网站名称:HTML.CN
网站地址:http://www.htmlcn.com
简介:
不用我多说,从站点和网址你就知道这是一个什么类型的网站了。不过,这里可不仅仅有HTML。还有网页制作软件。CSS,javascript以及ASP,PHP等等,可以说从网页制作到web编程都涉及到了。尽管它的内容还不能说十分丰富,但都很实用。
3。网站名称:流媒体中国技术频道
网站地址:http://www.liumeiti.com/technology
简介:
流媒体指在Internet/Intranet中使用流式传输技术的连续时基媒体(如relsystem.MPEG等)。顾名思义,流媒体中国就是一个以“流媒体”为主题的网站,在它的技术频道中,有大量的相关文章。对于从事或有心从事这方面技术的网友来说,绝对是一个不可多得的好去处。另外,有什么疑问和心得,你还可以去“流氏论坛”去讨论
4。网站名称:虚拟无忌
网站地址:http://www.86vr.com
简介:
虚拟现实(简称VR)技术虽然出现已经有几年,但一直没有普及起来。随着宽带的普及以及它自身特有的魅力,将来一定会有发展。虚拟现实的方方面面在这都可以找到
目前网页标准已是大势所趋。正如原始的品网站点,下面的这些站点将一如既往地显示群聚的力量。
凝视世界顶尖WEB设计师的标准制作,感受标准的气氛,掀起学习标准的浪潮。
CSS设计师们,加油吧。
CSS ZenGarden: http://www.csszengarden.com/
CSS禅意花园是最富盛名的CSS设计陈列馆,DaveShea在创办之初是为了让网页设计师通过CSS样式表针对同一个Html文件的设计不同的样式,却没想到这个项目成为了当今网页设计顶尖高手展现无穷创意的舞台,看看禅意花园的主人自己怎么说:http://www.onestab.net/a/interview_daveshea.html
Cssvault: http://www.cssvault.com/
Cssvault是第一个以网站缩略图的方式呈现的优秀设计的网站,而CSS陈列馆(showcase)这一说法也是由这里开始,从开始至今大约一年的时间里面,收录了大量的优秀设计,是CSS设计师必去的网站之一。
Web Standards Awards: http://www.webstandardsawards.com/
Web Standards Award,顾名思义,这里也是收集符合“网页标准”设计的网站,除收集外,还对每月收集来的网站进行评选,获胜设计可以冠以当月“网页标准”设计奖的头衔,对于设计师来说,也是一种殊荣。
CSSBeauty: http://www.cssbeauty.com/
CSSBeauty属于后起之秀,今年五月成立至今,也收录了大量的优秀站点。而与前几个网站有所不同的是,他对说收录的网站进行了分类,诸如:商业,娱乐,个人等等,使得收集的内容对访问者更有针对性。
unmatched〈style〉: http://www.unmatchedstyle.com/
这个网站是最新出炉的一个CSS陈列馆,和前面介绍的几个网站大同小异,也是采用缩略图的方式呈现,当然每个网站收集者的审美特征都不同,多一个地方无疑也给钟情于CSS设计的朋友多了一个选择,而且他们的更新很勤快。
The Weekly standards: http://www.weeklystandards.com/
这里是我特别推荐的一个,前面的网站都收集了很多优秀的设计,符合“网页标准”,可为什么这些网站符合“网页标准”,到底这些网站好在哪里?除了外观之外,还有那些地方是需要设计者注意的?这里将带给你答案,每周一个案例分析,精彩纷呈。
Stylegala: http://www.stylegala.com/
还有呢,Stylegala,也是上个月才推出的一个CSS陈列馆项目,和前面介绍的如出一辙,唯一不同的地方是访问者可以对收集其中的优秀设计进行投票。而作者对色彩搭配方面颇为敏锐,所收录的网站皆有很强的视觉效果。
Postearte: http://www.marcapaginas.net/postearte/galeria.php
还有最后一个。这个网站的主人好像是欧洲人,总之他写的不是英文,看不明白。不过他自己做的Postearte这个网页本身就是一个很优秀的设计。特别是导航条,别出心裁。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>网页特效代码|JsCode.CN|---可折叠展开收缩效果的栏目分类导航</title>
<style type="text/css">
td {font-size: 12px;}
</style>
</head>
<body>
<table width="200" height="250" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="38">
<img height="38" src="images/leftlist_head.jpg" width="200" /></td>
</tr>
<tr>
<td align="center" valign="top" background="images/leftlist_bg.jpg">
<script language="javascript" id="clientEventHandlersJS">
<!--
var number=8;
function LMYC() {
var lbmc;
//var treePic;
for (i=1;i<=number;i++) {
lbmc = eval('LM' + i);
//treePic = eval('treePic'+i);
//treePic.src = 'images/file.gif';
lbmc.style.display = 'none';
}
}
function ShowFLT(i) {
lbmc = eval('LM' + i);
//treePic = eval('treePic' + i)
if (lbmc.style.display == 'none') {
LMYC();
//treePic.src = 'images/nofile.gif';
lbmc.style.display = '';
}
else {
//treePic.src = 'images/file.gif';
lbmc.style.display = 'none';
}
}
//-->
</script>
<table cellspacing="0" cellpadding="0" width="88%" border="0">
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(1)" href="javascript:void(null)">
文管产品</a> </td>
</tr>
<tr id="LM1" style="DISPLAY: none">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="文件夹" href="http://www.jscode.cn" target="_parent">
文件夹</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="资料册" href="http://www.jscode.cn" target="_parent">
资料册</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="档案盒" href="http://www.jscode.cn" target="_parent">
档案盒</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="文件盒" href="http://www.jscode.cn" target="_parent">
文件盒</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="文件柜" href="http://www.jscode.cn" target="_parent">
文件柜</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="公文包" href="http://www.jscode.cn" target="_parent">
公文包</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(2)" href="javascript:void(null)">
桌面文具</a> </td>
</tr>
<tr id="LM2" style="DISPLAY: none">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="削笔机" href="http://www.jscode.cn" target="_parent">
削笔机</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="订书机" href="http://www.jscode.cn" target="_parent">
订书机</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(3)" href="javascript:void(null)">
商用机器</a> </td>
</tr>
<tr id="LM3" style="DISPLAY: none">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="碎纸机" href="http://www.jscode.cn" target="_parent">
碎纸机</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="切纸刀" href="http://www.jscode.cn" target="_parent">
切纸刀</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(4)" href="javascript:void(null)">
书写工具</a> </td>
</tr>
<tr id="LM4">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="中性笔" href="http://www.jscode.cn" target="_parent">
中性笔</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="圆珠笔" href="http://www.jscode.cn" target="_parent">
圆珠笔</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="记号笔" href="http://www.jscode.cn" target="_parent">
记号笔</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="白板笔" href="http://www.jscode.cn" target="_parent">
白板笔</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(5)" href="javascript:void(null)">
纸制品</a> </td>
</tr>
<tr id="LM5" style="DISPLAY: none">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="传真纸" href="http://jscode.cn" target="_parent">
传真纸</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="复印纸" href="http://www.jscode.cn" target="_parent">
复印纸</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="复写纸" href="http://www.jscode.cn" target="_parent">
复写纸</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="便条纸" href="http://www.jscode.cn" target="_parent">
便条纸</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="百事贴" href="http://www.jscode.cn" target="_parent">
百事贴</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="皮面笔记本" href="http://www.jscode.cn" target="_parent">
皮面笔记本</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(6)" href="javascript:void(null)">
办公电子</a> </td>
</tr>
<tr id="LM6" style="DISPLAY: none">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="计算器" href="http://www.jscode.cn" target="_parent">
计算器</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(7)" href="javascript:void(null)">
IT周边产品</a> </td>
</tr>
<tr id="LM7" style="DISPLAY: none">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="阅读架" href="http://www.jscode.cn" target="_parent">
阅读架</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="CD保护" href="http://www.jscode.cn" target="_parent">
CD保护</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="光盘盒" href="http://www.jscode.cn" target="_parent">
光盘盒</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="PADDING-LEFT: 20px" background height="23">
<img height="9" src="images/bit05.gif" width="8" align="absMiddle">
<a onclick="javascript:ShowFLT(8)" href="javascript:void(null)">
办公生活用品</a> </td>
</tr>
<tr id="LM8" style="DISPLAY: none">
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="清洁桶" href="http://www.jscode.cn" target="_parent">
清洁桶</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="白板" href="http://www.jscode.cn" target="_parent">
白板</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="网状文具" href="http://www.jscode.cn" target="_parent">
网状文具</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="封箱器" href="http://www.jscode.cn" target="_parent">
封箱器</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
<tr>
<td style="PADDING-LEFT: 40px" height="23">
<img height="7" src="images/bit06.gif" width="8" align="absMiddle">
<a title="购物袋" href="http://www.jscode.cn" target="_parent">
购物袋</a> </td>
</tr>
<tr>
<td background height="3"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="17">
<img height="17" src="images/leftlist_bottom.jpg" width="200" /></td>
</tr>
</table>
</body>
</html>
<html>
<head>
<title>网页特效|Linkweb.cn/Js|---日期+星期+时间</title>
</head><body>
<!--将以下代码加入HTML的<Body></Body>之间-->
<script language="JavaScript">
<!---
today=new Date();
var hours = today.getHours();
var minutes = today.getMinutes();
var seconds = today.getSeconds();
var timeValue = "<FONT COLOR=black>" + ((hours >12) ? hours -12 :hours); timeValue += ((minutes < 10) ? "<BLINK><FONT COLOR=black>:</FONT></BLINK>0" : "<BLINK><FONT COLOR=black>:</FONT></BLINK>") + minutes+"</FONT></FONT>";
timeValue += (hours >= 12) ? "<FONT COLOR=blue><I><B>pm</B></I></FONT>" : "<FONT COLOR=blue><B><I>am</I></B></FONT>";
function initArray(){
this.length=initArray.arguments.length
for(var i=0;i<this.length;i++)
this[i+1]=initArray.arguments[i] }
var d=new initArray("<font color=RED>星期日","<font color=black>星期一","<font color=black>星期二","<font color=black>星期三","<font color=black>星期四","<font color=black>星期五","<font color=red>星期六"); document.write("<font color=black>",today.getYear(),"<font color=black>年","<font color=black>",today.getMonth()+1,"<font color=black>月","<font color=black>",today.getDate(),"<font color=black>日 </FONT>",d[today.getDay()+1]," ",timeValue); //-->
</script>
</body></html>
onmouseout="this.style.backgroundColor=''" onmouseover="this.style.backgroundColor='#FFcccc'"
如何利用表格实现画中画,也就是页中页效果?
网页的排版大多使用表格,利用一个表单元可以嵌入一个网页,你知道吗?这样做有很多好处,比如你把经常更新的区域划分一个表格单元,然后在这个表格单元中嵌入你想要更新的内容,今后更新主页只需上传这个被嵌套的页面就可以了,没有必要对首页进行更新,是不是很方便。我写个最简单的例子代码:
<html>
<head>
<title>范例</title>
<body>
<table border="1" width="100%">
<tr>
<td>
<IFRAME src="example.htm" width="300" heitht="100"></IFRAME>
</td>
</tr>
</table>
</body>
</html>
插入被嵌入页的关键代码是:<IFRAME src="example.htm" width="300" heitht="100"></IFRAME>。example.htm是被嵌入的页面,标签<IFRAME>还有一些可用的参数设置如下:
marginwidth:网页中内容在表格右侧的预留宽度;例如:marginwidth="20",单位是pix,下同。
marginheight:网页中内容在表格顶部预留的高度;
hspace:网页右上角的的横坐标;
vspace:网页右上角的纵坐标;
frameborder:是否显示边缘;填"1"表示"是",填"0"表示"否"
scrolling:是否出现滚动条;填"1"表示"是",填"0"表示"否"
表格是网页内应用较多的东东,但一般我们只是用它来定位网页中的模块和排版文字。其实表格用好了还可以做出很多漂亮的效果,如图一,承载文字的表格有一种看似立体的感觉。下面就来介绍一下这种立体表格的制作方法。
图一
表格有立体的感觉的全是因为在表格的右边和下边有浅黑色的阴影。所以我们只要实现了阴影就可以实现这种效果。现在我们就开始具体讲述制作过程。在Frontpage2000中新建一个表格,选择菜单“表格”-“属性”-“表格”,在窗口内将表格的宽度设置为150象素;高度设置为200象素;边框粗细设置为0;将单元格边距设置为0,而单元格间距为1,如图二所示。
图二
完成以上设置后将表格的背景色设置为黑色,但表格内的单元格的背景色设置为白色,完成以后就回出现如图三所示的单象素黑色边框效果。
图三
接下来的工作就是要为右边和下边的黑色边框制作阴影,我们使用CSS样式的功能来实现。在图二所示的选项窗口内点击“样式”按钮继续选择“格式”-“边框”。在边框与阴影选项框内,分别将样式选择为“实线”;颜色选择为“灰色”;并在预览选项内将下边和右边的边框应用按钮选中,如图四所示。
图四
点击“预览”,你要的立体表格效果就出来了。(注明:我们在制作出来的最终效果可能和图一所示略有出入,这是因为我们首先制作出了如图三的单象素黑色边框,这样做的效果会更明显,更有立体感。)
在这里我们还给出在Dreamweaver内定义的样式代码,因为Frontpage和Dreamweaver的代码机制有差别,相对之下Dreamweaver对样式代码写得更规范更合理。表格代码如下:
<TABLE width="150" height="200" cellpadding="0" cellspacing="1" bgcolor="#000000" style="border-right-width:2px;border-bottom-width :2px;border-right-style : solid;border-bottom-style : solid;border-right-color : #a7a7a7;border-bottom-color : #a7a7a7;"> |
其中style以后的为样式代码“border-right-width”和“border-bottom-width”以后的2px代表阴影边框的宽度为2象素,border-right-color和border-bottom-color以后的#a7a7a7代表阴影线框的颜色代码,你也可以使用其他的颜色代码替换(具体请参照HTML颜色表)。试着自己改变一下,根据你的需要制作效果。
一、创建基本的表格
一个表由<table>开始, </table>结束,表的内容由 <tr>,<th>和<td>定义。<tr>说明表的一个行,表有多少行就有多少个<tr>;<th>说明表的列数和相应栏目的名 称,有多少个栏就有多少个<th>;<td>则填充由<tr>和 <th>组成的表格。
表格重要的基本标记不多,但每个标记都有很多的属性,考虑到一下子把这些属性都列出来,可能让初学者感到无从下手,所以我们还是从表格的外观(即浏览器中显示的表格的样式)来了解最基本的属性。
在讲解之前,我们先来看看表格的基本构造。 下图是一个3行3列的表格。
这里面有两个概念要弄明白:表格与单元格。他们的关系是整体与局部的关系,如同砌墙的砖和砌好的墙一样。在上面3行3列的表格中一共有9个单元格。由于我们后面将提到的表格属性和单元格属性有很多是相同的,所以一定要分清楚。前面已经说过表格的最基本标记为<table>、<tr>、<td>,可以先树立这样一个概念:描述整个表格的属性标记放在<table>里,描述单元格的属性标记放在<tr>、<td>里。 有这样一个概念后,我们学习起来就可能简单些。
1、表格、单元格的大小,表格边框的宽度、颜色,单元格边框的颜色
表格以及单元格的大小是用“width=#”和“height=#”属性说明,“width=#”表示宽,“height=#”表示高,,#是以象素或者百分比为单位的数字。表格边框的宽度是用“border=#”属性说明,,#为宽度值,单位是象素,表格边框的颜色是用“bordercolor="#"属性说明,#是16进制的6位数,格式为rrggbb,分别表示红、 绿、兰三色的分量。或者是16种已定义好的颜色名称,参见文本颜色,单元格边框的颜色属性与表格的相同,但只适用于IE。下面是一个宽为300,高为80,边框宽为4,边框颜色为“FF0000”的一行两列表格,其中第一个单元格的宽为200,高为80,第二个单元格的边框颜色为“0000FF”。
代码如下:
<table border="4" width="300" height="80" bordercolor="#FF0000">
<tr>
<td width="200" height="80"> </td>
<td bordercolor="#0000FF"> </td>
</tr>
</table>
2、表格的水平摆放位置
表格的水平摆放位置是用align="#" 属性说明的,#为left(左对齐), right(右对齐), center(居中)。分别见下例,注意这三个表格与边界的位置关系:
第三个表格的代码如下:
<table width="80" border="1" align="right" height="30">
<tr>
<td>右对齐</td>
</tr>
</table>
3、单元格里内容的位置属性
水平对齐方式,用align="#"属性说明,#为left(左对齐), right(右对齐), center(居中);垂直对齐方式,用valign="#"属性说明,#为top(上对齐), bottom(下对齐), middle(居中)。分别见下例,注意单元格里的内容与边框的的位置关系:
水平对齐方式:
代码如下:
<table width="450" border="1">
<tr>
<td width="150">
<div align="left">内容左对齐</div>
</td>
<td width="150">
<div align="center">内容居中</div>
</td>
<td>
<div align="right">内容右对齐</div>
</td>
</tr>
</table>
垂直对齐方式
代码如下:
<table width="150" border="1">
<tr>
<td height="40" width="146" valign="top">内容上对齐</td>
</tr>
<tr>
<td height="40" width="146" valign="middle">内容居中</td>
</tr>
<tr>
<td height="40" width="146" valign="bottom">内容下对齐</td>
</tr>
</table>
4、表格的背景色、背景图片,单元格的背景色、背景图片
背景色属性:bgcolor="#" ,背景图片属性:background="#"。
见下例:
代码如下:
<table width="450" border="1" bgcolor="#539996" bordercolor="#FFFFFF" height="90">
<tr>
<td> </td>
<td background="Back01.gif"> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td bgcolor="#FF0000"> </td>
<td> </td>
</tr>
</table>
说明:在上例中,整个表格的背景色是 bgcolor="#539996" ,第一行第二列的单元格背景图片是 background="Back01.gif" ,第三行第二列的单元格背景色是 bgcolor="#FF0000" ,根据显示结果可以看出:设置表格的背景色后再设置单元格的背景色或背景图片,将优先显示单元格的属性。
5、表格属性cellspacing、cellpadding
5、表格属性cellspacing、cellpadding
cellspacing属性用来指定表格各单元格之间的空隙。此属性的参数值是数字,表示单元格间隙所占的像素点数。
我们来看下面的两个表格:
上面第一个表格的单元格之间没有空白距离,而第二个的单元格之间有很大的空白距离,我们来比较一下他们的源代码:
第一个表格的代码:
<table width="200" cellspacing="0" border="1" bordercolor="#000000">
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
第二个表格的代码:
<table width="200" cellspacing="8" border="1" bordercolor="#000000">
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
比较代码,上边两个表格中只有
cellspacing 的设置不同,一个为“0”,一个为“8”,显示的结果就是第一个表格的每个单元格之间的距离为0(在本例中由于我们为了显示的方便,将表格边框设为“1”,所以单元格的真实距离是“2”,若将表格边框设为“0”,则单元格 的距离就是0了,第二个单元格同理),第二个表格的每个单元格之间的距离为8。
cellpadding属性用来指定
单元格内容与单元格边界之间的空白距离的大小。此属性的参数值也是数字,表示单元格内容与上下边界之间空白距离的高度所占像素点数以及单元格内容与左右边界之间空白距离的宽度所占的像素点数。我们先来看看这个例子:
我们来看下面两个表格:
第一个表格单元格的内容与单元格边界之间没有空白距离,而第二个表格单元格的内容与单元格边界之间有空白距离,我们来比较一下他们的源代码:
第一个表格的代码:
<table width="240" cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<tr>
<td width="120">网页陶吧</td>
<td> </td>
</tr>
</table>
第二个表格的代码:
<table width="240" cellspacing="0" border="1" bordercolor="#000000" cellpadding="15">
<tr>
<td width="120">网页陶吧</td>
<td> </td>
</tr>
</table>
两个表格只有红色部分代码不同。第一个表格中"网页陶吧"这几个字离它所在的单元格为0,那是因为设置了cellpadding="0"的原因.第一个表格中的"网页陶吧"这几个字离它所在的单元格比较远,那是因为cellpadding="15",也就是说"网页陶吧"离它所在的单元格的边界的距离为20像素。简单的说,cellpadding的值等于多少,那表格内的单元格从自身边界开始向内保留多少空白,单元格里的元素永远都不会进入那些空白里。
我们在以后的篇幅中会大量用到这两个属性,所以请大家不要弄混乱了, 为了形象的理解,请参考下图:
(一)表格基本语句格式
<TABLE>...</TABLE> —— 表格指令
<TR>...</TR> —— 表格行
<TD>...</TD> —— 表格栏
<TBODY>...</TBODY> —— 表格主体部分
<CAPTION>...</CAPTION> —— 表格标题
<TH>...</TH> —— 表格栏标题(粗体字)
这五个表格基本语句是构成一个表格的骨架,其中<Table>、<TR>、<TD>是最重要的标记,学会这三个语句就已经能画出一个完整的表格了。请看下面这个简单的例子。
语句:
<TABLE border>
<CAPTION>收支表</CAPTION>
<TBODY>
<TR> <TH>公司</TH> <TH>收入</TH> <TH>支出</TH> </TR>
<TR> <TD>A</TD> <TD>¥100000</TD> <TD>¥60000</TD> </TR>
</TBODY> </TABLE>
效果:
收支表
公司 |
收入 |
支出 |
A |
¥100000 |
¥60000 |
(二)表格相关属性
1、<TABLE>语句常用属性
示范语句:
<table width="50%" rules="ALL" border="1" cellspacing="2" cellpadding="2" align="CENTER" valign="TOP" background="background.gif" bgcolor="#0000FF" bordercolor="#FF00FF" hspace="10" vspace="10">
具体说明:
- width="50%",表格宽度,接受绝对值(如 300)及相对值(如 80%)。
- rules="ALL",表格内网格,可选值为: all,none,cols,rows,groups。
- border="1",表格边框宽度,如果去掉这个属性,就生成无边框表格。
- cellspacing="2",表格内格线宽度,数值越大,格线越粗。
- cellpadding="2",文字与格线间距,数值越大,间距越大。
- align="CENTER",表格的摆放位置(水平),可选值为: left, right, center。
- valign="TOP",表格内图文的摆放位置(垂直),可选值为: top, middle, bottom。
- background="background.gif",表格内背景图案,不要与 bgcolor 同用。
- bgcolor="#0000FF",表格背景色,不要与 background 同用。
- bordercolor="#FF00FF",表格边框颜色。
-
hspace="10",表格边框与环绕文字间水平距离,数值越大,间距越大。
-
vspace="10",表格边框与环绕文字间垂直距离,数值越大,间距越大。
-
其他表格属性,因为有些不是很常用,或者有些对浏览器类型有要求,并未列出。
2、<TR>语句常用属性
示范语句:
<tr align="RIGHT" valign="MIDDLE" background="background.gif" bgcolor="#0000FF" bordercolor="#FF00FF">
具体说明:
3、<TD>语句常用属性
示范语句:
<td width="50%" height="300" colspan="2" rowspan="3" align="LEFT" valign="BOTTOM" background="background.gif" bgcolor="#FF00FF" bordercolor="#808080">
具体说明:
- width="50%",单元格宽度,接受绝对值(如 300)及相对值(如 50%)。
- height="300",单元格高度,接受绝对值(如 300)及相对值(如 50%)。
- colspan="2",单元格向右合并栏数,只需写在合并起始单元格中。
- rowspan="3",单元格向下合并栏数,只需写在合并起始单元格中。
- align="LEFT",单元格内文字的摆放位置(水平),可选值为: left, right, center。
- valign="BOTTOM",单元格内图文的摆放位置(垂直),可选值为: top, middle, bottom。
- background="background.gif",单元格内背景图案,不要与 bgcolor 同用。
- bgcolor="#0000FF",单元格内背景色,不要与 background 同用。
- bordercolor="#FF00FF",单元格内边框颜色。
- 其他单元格属性,因为有些不是很常用,或者有些对浏览器类型有要求,并未列出。
(三)表格简单的例子
1、去掉<Table>中的 Border 参数即可得到无边框表格。
语句:
<TABLE>
<CAPTION>收支表</CAPTION>
<TBODY>
<TR> <TH>公司</TH> <TH>收入</TH> <TH>支出</TH> </TR>
<TR> <TD>A</TD> <TD>¥100000</TD> <TD>¥60000</TD> </TR>
</TBODY> </TABLE>
效果:
收支表
公司 |
收入 |
支出 |
A |
¥100000 |
¥60000 |
2、通过 Border、BorderColor,改变表格边框的大小与颜色。
语句:
<TABLE border=9 bordercolor=green>
<TBODY>
<TR> <TH>公司</TH> <TH>收入</TH> <TH>支出</TH> </TR>
<TR> <TD>A</TD> <TD>¥100000</TD> <TD>¥60000</TD> </TR>
</TBODY> </TABLE>
效果:
公司 |
收入 |
支出 |
A |
¥100000 |
¥60000 |
3、通过 Cellspacing 还可以调节单元格间距离。
语句:
<TABLE border=9 cellspacing=6>
<TBODY>
<TR> <TH>公司</TH> <TH>收入</TH> <TH>支出</TH> </TR>
<TR> <TD>A</TD> <TD>¥100000</TD> <TD>¥60000</TD> </TR>
</TBODY> </TABLE>
效果:
公司 |
收入 |
支出 |
A |
¥100000 |
¥60000 |
4、ColSpan 与 RowSpan 的使用。
语句:
<TABLE border=2 bordercolor=black>
<TBODY>
<TR> <TH>公司</TH> <TH colspan=2>收支</TH> <TH rowspan=2>盈利 !</TH> </TH>
<TR> <TD>A</TD> <TD>¥100000</TD> <TD>¥60000</TD> </TR>
</TBODY> </TABLE>
效果:
公司 |
收支 |
盈利 ! |
A |
¥100000 |
¥60000 |
import java.io.*;
import java.util.*;
public class MyServlet extends HttpServlet{
private String target="/hello.jsp";
public void init (ServletConfig config)throws ServletException
{super.init(config);}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServleException ,IOException
{ doPost(request,response); }
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServleException ,IOException{
String username =request.getParameter("username");
String password =request.getParameter("password");
request.setAttribute("USER",username);
request.setAttribute("PASSWORD",password);
ServletContext context=getServletContext();
System.out.println("Redirecting to"+target);
RequestDispatcher myservlet=context.getRequestDispatcher(target);
myservlet.forward(request,response);
}
public void destroy(){};
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>melody的小屋</title>
<style type="text/css">
<!--
.STYLE1 {
font-size: x-large;
font-weight: bold;
font-family: "宋体";
}
-->
</style>
</head>
<body>
<center>
<p>
<h1>欢迎来到melody的小屋</h1>
<p><a href="login.html">点击进入</a></p>
</body>
</html>
<%@ page language="java" import="java.lang.*,java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>myapp</title>
</head>
<body>
<br>
<form id="loginForm" name="loginForm" method="post" action="myservlet">
<div align="center">
<table width="100%" >
<tr>
<td width="50%"> <div align="right">用户名</div></td>
<td width="50%"><div align="left"><input name="username" type="text" id="username" /></div></td>
</tr>
<tr>
<td width="50%">
<div align="right">密 码</div></td>
<td width="50%"><div align="left"><input name="password" type="password" id="password" /></div> </td>
</tr>
<tr>
<td colspan="2">
<div align="center">
<input name="Submit" type="submit" id="Submit" value="确定" />
</div> </td>
</tr>
</table>
</form>
<p> </p>
<p> </p>
</body>
</html>
问题1:第一行代码的作用 出现情况,在网页上显示出来了,经检查发现,<%@ %>后面的%忘记写了
问题2:为啥先添了个表单,然后里面插入个表格,在每次输入之前 都有一个div设置
问题3:用户名 密码 不能对齐,在设计面板上 我想在密码中间打个空格,可是打不动,后来是在代码栏里,加了好多
应该说,PDF文档的规范性使得浏览者在阅读上方便了许多,但倘若要从里面提取些资料,实在是麻烦的可以。回忆起当初做毕业设计时规定的英文翻译,痛苦的要命,竟然傻到用Print Screen截取画面到画图板,再回粘到word中,够白了:(最近连做几份商务标书,从Honeywell本部获取的业绩资料全部是英文版的PDF,为了不再被折磨,花费了一个晚上的时间研究PDF和Word文件的转换,找到下面2种方法,出于无产阶级所谓的同甘共苦之心,共享下:)
1、实现工具:Office 2003中自带的Microsoft Office Document Imaging
应用情景:目前国外很多软件的支持信息都使用PDF方式进行发布,如果没有Adobe Reader,无法查看其内容,如果没有相关的编辑软件又无法编辑PDF文件。转换为DOC格式则可以实现编辑功能。尽管有些软件也可以完成PDF转换为DOC的工作,但很多都不支持中文,我们利用Office 2003中的Microsoft Office Document Imaging组件来实现这一要求最为方便。
使用方法:
第一步:首先使用Adobe Reader打开待转换的PDF文件,接下来选择“文件→打印”菜单,在打开的“打印”设置窗口中将“打印机”栏中的“名称”设置为“Microsoft Office Document Image Writer”,确认后将该PDF文件输出为MDI格式的虚拟打印文件。
编辑提示:如果你在“名称”设置的下拉列表中没有找到“Microsoft Office Document Image Writer”项,那证明你在安装Office 2003的时候没有安装该组件,请使用Office 2003安装光盘中的“添加/删除组件”更新安装该组件。
第二步:运行Microsoft Office Document Imaging,并利用它来打开刚才保存的MDI文件,选择“工具→将文本发送到Word”菜单,并在弹出的窗口中勾选“在输出时保持图片版式不变”,确认后系统提示“必须在执行此操作前重新运行OCR。这可能需要一些时间”,不管它,确认即可。
编辑提示:目前,包括此工具在内的所有软件对PDF转DOC的识别率都不是特别完美,而且转换后会丢失原来的排版格式,所以大家在转换后还需要手工对其进行后期排版和校对工作。
2、实现工具:Solid Converter PDF
应用情景:利用Office 2003中的Microsoft Office Document Imaging组件来实现PDF转Word文档在一定程度上的确可以实现PDF文档到Word文档的转换,但是对于很多“不规则”的PDF文档来说,利用上面的方法转换出来的Word文档中常常是乱码一片。为了恢复PDF的原貌,推荐的这种软件可以很好地实现版式的完全保留,无需调整,而且可以调整成需要的样板形式。
使用方法:
1、下载安装文件Solid Converter PDF,点击安装。
编辑提示:安装前有个下载安装插件的过程,因此需要保证网络连接通畅。
2、运行软件,按工具栏要求选择需要转换的PDF文档,点击右下的“转换”(Convert)按扭,选择自己需要的版式,根据提示完成转换。
已验证用户给予写权限 (当然也能读)
密码数据存放到passwd文件中
passwd
[users]
#harry = harryssecret
#sally = sallyssecret
admin=admin111
lvzy=lvzy111
含义是:
增加了admin这个用户,密码为admin111
增加了lvzy这个用户,密码为lvzy111
Author
[groups]
# harry_and_sally = harry,sally
进行用户组的配制
比如:
Lantian=admin,lvzy
含义是将admin,lvzy加入到组Lantian中去
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
进行文件权限的设置
比如存在libs这个文件,而我只希望admin一个人可以读写,lvzy有读权限,未授权的无法访问,则可以这样写
[/libs]
admin=rw
lvzy=r
*=none
注:*表示匿名用户
四.测试SVN
在客户端(当然也可以是本机),右击点TortoiseSVN-》Repo_Browser在弹出的URL中输入svn://服务器IP,点击OK,这
时会要求你输入用户名和密码,你将你在passwd中设置的用户和密码在这里输入就可以了,然后你就可以看到版本库的内容,当然刚开始是新的,具体的客户
端使用请查看其他文档。
五. 说明
服务器端防火墙应关闭,否则,将直接影响访问速度或不可访问。
服务器端的安装可以完全按照以上四步的操作进行(可以不在服务器上安装客户端,即不执行二.4步骤);客户端的安装,只需要执行二.4步操作,安装客户端软件即可。客户端使用时,打开IE浏览器按第四步骤输入:svn://IP 即可。
安装
一、 获取资源
(1) apache Http Server 2.0.55 。 用于和 SVN 整合
(2) svn-1.3.2-setup.exe SVN 服务器端
(3) TortoiseSVN-1.3.2.5840-svn-1.3.0.msi SVN 的客户端
(4) LanguagePack_1.3.2_zh_CN.exe tortoise 的语言包
(5) SVNService.zip SVN 的一个第三方工具,将 SVN 用做 windows 后台服务
二、 安装
上面的 1 、 2 、 3 、 4 均为直接安装即可,注意在安装完 3 再安装四的时候要重启一下,然后将 5 解压到 2 中安装目录下的 bin 目录中。至此安装完毕
三、 配置
没什么好特别配置的。基本上安装好了就可以使用,使用方式是用 3
的客户端工具选择一个空的文件夹右键 ---- à 在此创建文件库。一个 SVN 的仓库文件就创建完毕。因为要考虑到后面的 apache
的整合所以建议名字不要太专一性,然后转到项目或者你想加入版本控制的文件或者文件夹上面,点右键选择导入,在弹出的对话框里面输入仓库地址,执行导入完
毕后一个完整的文件版本诞生了。
注意:在导入时 3 中的客户端默认是导入当前文件夹的子文件夹,所以如果你想将当前目录也导入的话,请将他放入一个文件夹内再执行导入操作。
然后是仓库的配置:转到仓库目录的 conf 中,寻找 svnserve.conf 文件并将其中的
[general]
anon-access = read
auth-access = write
password-db = passwd
realm = My First Repository
前面的 # 号去掉,然后去掉他前面的空格。保存。
这里的意思是: anon-access 指 匿名访问的权限,可以是 read,write,none, 默认为 read
auth-access 指 认证用户的权限,可以是 read,write,none, 默认为 write
password-db 指 密码数据库的路径,去掉前面的,存的是认证用户的用户名和密码, username=passwd
然后是修改 passwd 文件
1. 去掉 [users] 前面的 #, 否则 svn 只能以匿名用户登录,客户端不会出现登录窗口,除非你的 anon 不为 none, 否则将返回一个错误。
2. 添加用户名和密码 username=password
四、 启动 SVN 服务器
对于单个代码仓库
启动命令 svnserve -d -r /home/svnrepo --listen-host 192.168.100.200
其中 -d 表示在后台运行, -r 指定服务器的根目录,这样访问服务器时就可以直接用 svn:// 服务器 ip 来访问了。如果服务器有多 ip 的话 --listen-host 来指定监听的 ip 地址 .
我们可以在 svn 客户端中通过 svn://192.168.100.200 来访问 svn 服务器
对于多个代码仓库 , 我们在启动时也可以用 -r 选项来指定服务器根目录 , 但访问时需要写上每个仓库相对于 svn 根目录的相对路径 .
比如 , 我们有两个代码仓库 /home/repoa 和 /home/repob,
我们用 svnserve -d -r /home --listen-host 192.168.100.200 来启动 ,
那么在客户端访问时可以用 svn://192.168.100.200/repoa 和 svn://192.168.1.200/repob
来分别访问两个项目
启动完成以后 , 我们可以用 ps aux|grep svnserv 来查看是否存在 svnserve 进程 .
五、 开放服务器端口
svn 默认端口是 3690 ,你需要在防火墙上开放这个端口。
也可以通过 svnserve 的 --listen-port 选项来指定一个已经开放的其他端口 , 不过这样的话客户端使用也必须家上端口 , 如 svn://192.168.100.200:9999/ 。
六、 与 apache 的整合
各種存取 repository 的方法
SVN 設計時已經把 repository 的存取抽象化了,所以理論上,只要是可以進行資料傳送的方法或通訊協定,就可以用來存取 repository。
實際上,SVN 目前能支援的存取方法還是有限的,不過也比它的前輩 CVS 多了一些,而且未來還可以繼續擴充。 SVN 存取 repository 的方法要在 URL 的通訊協定部分指定,可以有:
file:///
直接存取本地檔案系統裡的 repository。
http://
透過支援 SVN 的 Apache 伺服器 (以 module 的形式),以 WebDAV 存取
https://
一樣是用 WebDAV,但加上 SSL
svn://
以自訂的通訊協定,連接 svnserve 來存取 repository
svn+ssh://
和 svn:// 一樣,但透過 ssh 協定作 tunnel
另一种比较常用的使用SVN的方式是将其与apache整合。通过http协议来访问代码,通过web界面来浏览察看,通过http服务器的安全控制来进行权限认证。
安装要点记录如下:
0 假设安装Apache至D:\Apache2
1 复制%SVN_HOME%\bin\libdb42.dll、libeay32.dll、以及 ssleay32.dll到%APACHE_HOME%\bin
2 复制%SVN_HOME%\httpd\*.so到%APACHE_HOME%\modules
3 修改%APACHE_HOME%\conf\httpd.conf,增加或修改:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
|
4 在<VirtualHost>中增加/svn的<Location>
<Location /svnserver>
DAV svn
SVNPath D:/SVNDIR/taowap
</Location>
|
5 重起apache,通过浏览器访http://localhost/svnserver可看到Subversion的信息。
在访问控制的方面,可以采用windows域用户身份验证。此处也可以用mysql,passwd文件,LDAP等其他任何Apache支持的验证方式。
此处我采用文件方式,首先建立一个保存密码的文件,如果不需要对密码加密,可增加-p参数生成plain text。
%APACHE_HOME%\bin\htpasswd –c -p d:\passwd\passwords user1
生成的文件内容如下:
# 格式username:password
user1:123456
|
如果要按照Group的方式来控制权限,可同时建立一个groups文件,内容如下:
# 格式:GroupName: username1 username2
svngroup: user1 user2
|
在httpd.conf中的/svnserver处增加权限控制部分:
<Location /svnserver>
DAV svn
# 指向SVN Repository的ROOT
SVNPath d:/svnrepo
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile d:/passwd/passwords
AuthGroupFile d:/passwd/groups
Require group svngroup
</Location>
|
重起服务器,浏览http://localhost/svnserver,出现安全对话框,输入用户名密码即可成功。
七: 附: svnserve [ 选项 ]
有效选项:
-d [--daemon] : 后台模式
--listen-port arg : 监听端口(后台模式)
--listen-host arg : 监听主机名或 IP 地址(后台模式)
--foreground : 在前台运行(调试时有用)
-h [--help] : 显示这个帮助
--version : 显示版本信息
-i [--inetd] : inetd 模式
-r [--root] arg : 服务根目录
-R [--read-only] : 不赞成;使用档案库配置文件
-t [--tunnel] : 隧道模式
--tunnel-user arg : 隧道用户名(模式是当前用户 UID 的名字)
-T [--threads] : 使用线程代替进程
-X [--listen-once] : 监听一次(调试时有用)
如果你的系统是 WinXP,在安装 Office2003 时出现了“不能访问 Windows Installer
服务,可能是你在安全摸式下运行 Windows 或 Window Installer 没有正确安装”错误(实际上是所有使用 Windows
Installer 服务安装的 MSI 格式程序均不能正常安装);在“服务”里查看“Windows Installer
”服务的状态,一般为停用,当你试图启用此服务,会发现此服务已被系统禁用,或则 Windows Installer
服务已被标记为删除;而当你尝试重新安装 Windows Installer 服务时,系统提示“指定的服务已存在”——那这篇文章就是你想要的了。
解决方法(在 WinXP/Win2000 上通过):
- 先用记事本编写如下内容,并保存为 installer.reg 格式文件,双击将文件导入注册表;
- 运行“CMD”命令提示符,输入“msiexec /regserver”并回车;
- 无须重新启动,即刻搞掂!
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSIServer]
"ImagePath"=-
"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,\
00,73,00,69,00,65,00,78,00,65,00,63,00,2e,00,65,00,78,00,65,00,20,00,2f,00,\
56,00,00,00
; ImagePath = %SystemRoot%\System32\msiexec.exe /V