文档库 最新最全的文档下载
当前位置:文档库 › SQLite3 API使用大全

SQLite3 API使用大全

SQLite3 API使用大全
SQLite3 API使用大全

SQLite3API使用大全E-mail:18918737 (at) qq dot com,智有不明

前序: (1)

一、版本 (1)

二、基本编译 (2)

三、 SQLITE操作入门 (2)

(1)基本流程 (2)

(2) SQL语句操作 (4)

(3)操作二进制 (8)

(4)事务处理 (10)

四、给数据库加密 (10)

五、后记 (25)

前序:

Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。

这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。我以前的工作就是为unix 平台写代码。下面我所写的东西,虽然没有验证,但是我已尽量不使用任何 windows 的东西,只使用标准 C 或标准C++。但是,我没有尝试过在别的系统、别的编译器下编译,因此下面的叙述如果不正确,则留待以后修改。

下面我的代码仍然用 VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如配合 Vassist )。下面我所说的编译环境,是VC2003。如果读者觉得自己习惯于 unix 下用 vi 编写代码速度较快,可以不用管我的说明,只需要符合自己习惯即可,因为我用的是标准 C 或 C++ 。不会给任何人带来不便。

一、版本

从https://www.wendangku.net/doc/3918882228.html,网站可下载到最新的 sqlite 代码和编译版本。我写此文章时,最新代码是 3.3.17 版本。

很久没有去下载 sqlite 新代码,因此也不知道 sqlite 变化这么大。以前很多文件,现在全部合并成一个 sqlite3.c 文件。如果单独用此文件,是挺好的,省去拷贝一堆文件还担心有没有遗漏。但是也带来一个问题:此文件太大,快接近7万行代码,VC开它整个机器都慢下来了。如果不需要改它代码,也就不需要打开 sqlite3.c 文件,机器不会慢。但是,下面我要写通过修改 sqlite 代码完成加密功能,那时候就比较痛苦了。如果个人水平较高,建议用些简单的编辑器来编辑,例如 UltraEdit 或 Notepad 。速度会快很多。

二、基本编译

这个不想多说了,在 VC 里新建 dos 控制台空白工程,把 sqlite3.c 和 sqlite3.h 添加到工程,再新建一个 main.cpp 文件。在里面写:

extern "C"

{

#include "./sqlite3.h"

};

int main( int , char** )

{

return 0;

}

为什么要extern “C” ?如果问这个问题,我不想说太多,这是C++的基础。要在 C++ 里使用一段 C 的代码,必须要用extern “C” 括起来。C++跟 C虽然语法上有重叠,但是它们是两个不同的东西,内存里的布局是完全不同的,在C++编译器里不用extern “C”括起C代码,会导致编译器不知道该如何为 C 代码描述内存布局。

可能在 sqlite3.c 里人家已经把整段代码都extern “C” 括起来了,但是你遇到一个 .c 文件就自觉的再括一次,也没什么不好。

基本工程就这样建立起来了。编译,可以通过。但是有一堆的 warning。可以不管它。

三、 SQLITE操作入门

sqlite提供的是一些C函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 sqlite 函数,sqlite 就会为你操作数据库。sqlite 跟MS的access一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。备份这个文件就备份了整个数据库。

sqlite 不需要任何数据库引擎,这意味着如果你需要 sqlite 来保存一些用户数据,甚至都不需要安装数据库(如果你做个小软件还要求人家必须装了sqlserver 才能运行,那也太黑心了)。

下面开始介绍数据库基本操作。

(1)基本流程

i.1 关键数据结构

sqlite 里最常用到的是 sqlite3 * 类型。从数据库打开开始,sqlite就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。当数据库打开时开始,这个类型的变量就代表了你要操作的数据库。下面再详细介绍。

i.2 打开数据库

int sqlite3_open( 文件名, sqlite3 ** );

用这个函数开始数据库操作。

需要传入两个参数,一是数据库文件名,比如:c://DongChunGuang_Database.db。

文件名不需要一定存在,如果此文件不存在,sqlite 会自动建立它。如果它存在,就尝试把它当数据库文件来打开。

sqlite3 ** 参数即前面提到的关键数据结构。这个结构底层细节如何,你不要关它。

函数返回值表示操作是否正确,如果是 SQLITE_OK 则表示操作正常。相关的返回值sqlite 定义了一些宏。具体这些宏的含义可以参考 sqlite3.h 文件。里面有详细定义(顺便说一下,sqlite3 的代码注释率自称是非常高的,实际上也的确很高。只要你会看英文,sqlite 可以让你学到不少东西)。

下面介绍关闭数据库后,再给一段参考代码。

i.3 关闭数据库

int sqlite3_close(sqlite3 *);

前面如果用 sqlite3_open 开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。

下面给段简单的代码:

extern "C"

{

#include "./sqlite3.h"

};

int main( int , char** )

{

sqlite3 * db = NULL; //声明sqlite关键结构指针

int result;

//打开数据库

//需要传入 db 这个指针的指针,因为 sqlite3_open 函数要为这个指针分配内存,还要让db指针指向这个内存区

result = sqlite3_open( “c://Dcg_database.db”, &db );

if( result != SQLITE_OK )

{

//数据库打开失败

return -1;

}

//数据库操作代码

//…

//数据库打开成功

//关闭数据库

sqlite3_close( db );

return 0;

}

这就是一次数据库操作过程。

(2) SQL语句操作

本节介绍如何用sqlite 执行标准 sql 语法。

i.1 执行sql语句

int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *, char **errmsg );

这就是执行一条 sql 语句的函数。

第1个参数不再说了,是前面open函数得到的指针。说了是关键数据结构。

第2个参数const char *sql 是一条 sql 语句,以/0结尾。

第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。(什么是回调函数,自己找别的资料学习)

第4个参数void * 是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。

第5个参数char ** errmsg 是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行 sqlite3_exec 之后,执行失败时可以查阅这个指针(直接

printf(“%s/n”,errmsg))得到一串字符串信息,这串信息告诉你错在什么地方。

sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个 char*得到具体错误提示。

说明:通常,sqlite3_callback 和它后面的 void * 这两个位置都可以填 NULL。填NULL 表示你不需要回调。比如你做 insert 操作,做 delete 操作,就没有必要使用回调。而当

你做 select 时,就要使用回调,因为 sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

i.2 exec 的回调

typedef int (*sqlite3_callback)(void*,int,char**, char**);

你的回调函数必须定义成上面这个函数的类型。下面给个简单的例子:

//sqlite3的回调函数

// sqlite 每查到一条记录,就调用一次这个回调

int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name )

{

//para是你在 sqlite3_exec 里传入的 void * 参数

//通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。然后操作这些数据

//n_column是这一条记录有多少个字段 (即这条记录有多少列)

// char ** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个1维数组(不要以为是2维数组),每一个元素都是一个 char * 值,是一个字段内容(用字符串来表示,以/0结尾)

//char ** column_name 跟 column_value是对应的,表示这个字段的字段名称

//这里,我不使用 para 参数。忽略它的存在.

int i;

printf( “记录包含 %d 个字段/n”, n_column );

for( i = 0 ; i < n_column; i ++ )

{

printf( “字段名:%s ?> 字段值:%s/n”, column_name[i], column_value[i] );

}

printf( “------------------/n“ );

return 0;

}

int main( int , char ** )

{

sqlite3 * db;

int result;

char * errmsg = NULL;

result = sqlite3_open( “c://Dcg_database.db”, &db );

if( result != SQLITE_OK )

{

//数据库打开失败

return -1;

}

//数据库操作代码

//创建一个测试表,表名叫 MyTable_1,有2个字段: ID 和 name。其中ID是一个自动增加的类型,以后insert时可以不去指定这个字段,它会自己从0开始增加

result = sqlite3_exec( db, “create table MyTable_1( ID integer primary key autoincrement, name nvarchar(32) )”, NULL, NULL, errmsg );

if(result != SQLITE_OK )

{

printf( “创建表失败,错误码:%d,错误原因:%s/n”, result, errmsg );

}

//插入一些记录

result = sqlite3_exec( db, “insert into MyTable_1( name ) values ( …走路? )”, 0, 0, errmsg );

if(result != SQLITE_OK )

{

printf( “插入记录失败,错误码:%d,错误原因:%s/n”, result, errmsg );

}

result = sqlite3_exec( db, “insert into MyTable_1( name ) values ( …骑单车? )”, 0, 0, errmsg );

if(result != SQLITE_OK )

{

printf( “插入记录失败,错误码:%d,错误原因:%s/n”, result, errmsg );

}

result = sqlite3_exec( db, “insert into MyTable_1( name ) values ( …坐汽车? )”, 0, 0, errmsg );

if(result != SQLITE_OK )

{

printf( “插入记录失败,错误码:%d,错误原因:%s/n”, result, errmsg );

}

//开始查询数据库

result = sqlite3_exec( db, “select * from MyTable_1”, LoadMyInfo, NULL, errmsg );

//关闭数据库

sqlite3_close( db );

return 0;

}

通过上面的例子,应该可以知道如何打开一个数据库,如何做数据库基本操作。

有这些知识,基本上可以应付很多数据库操作了。

i.3 不使用回调查询数据库

上面介绍的 sqlite3_exec 是使用回调来执行 select 操作。还有一个方法可以直接查询而不需要回调。但是,我个人感觉还是回调好,因为代码可以更加整齐,只不过用回调很麻烦,你得声明一个函数,如果这个函数是类成员函数,你还不得不把它声明成 static 的(要问为什么?这又是C++基础了。C++成员函数实际上隐藏了一个参数:this,C++调用类的成员函数的时候,隐含把类指针当成函数的第一个参数传递进去。结果,这造成跟前面说的 sqlite 回调函数的参数不相符。只有当把成员函数声明成 static 时,它才没有多余的隐含的this参数)。

虽然回调显得代码整齐,但有时候你还是想要非回调的 select 查询。这可以通过

sqlite3_get_table 函数做到。

int sqlite3_get_table(sqlite3*, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg );

第1个参数不再多说,看前面的例子。

第2个参数是 sql 语句,跟 sqlite3_exec 里的 sql 是一样的。是一个很普通的以/0结尾的char *字符串。

第3个参数是查询结果,它依然一维数组(不要以为是二维数组,更不要以为是三维数组)。它内存布局是:第一行是字段名称,后面是紧接着是每个字段的值。下面用例子来说事。

第4个参数是查询出多少条记录(即查出多少行)。

第5个参数是多少个字段(多少列)。

第6个参数是错误信息,跟前面一样,这里不多说了。

下面给个简单例子:

int main( int , char ** )

{

sqlite3 * db;

int result;

char * errmsg = NULL;

char **dbResult; //是 char ** 类型,两个*号

int nRow, nColumn;

int i , j;

int index;

result = sqlite3_open( “c://Dcg_database.db”, &db );

if( result != SQLITE_OK )

{

//数据库打开失败

return -1;

}

//数据库操作代码

//假设前面已经创建了 MyTable_1 表

//开始查询,传入的 dbResult 已经是 char **,这里又加了一个 & 取地址符,传递进去的就成了 char ***

result = sqlite3_get_table( db, “select * from MyTable_1”, &dbResult, &nRow, &nColumn, &errmsg );

if( SQLITE_OK == result )

{

//查询成功

index = nColumn; //前面说过 dbResult 前面第一行数据是字段名称,从 nColumn 索引开始才是真正的数据

printf( “查到%d条记录/n”, nRow );

for( i = 0; i < nRow ; i++ )

{

printf( “第 %d 条记录/n”, i+1 );

for( j = 0 ; j < nColumn; j++ )

{

printf( “字段名:%s ?> 字段值:%s/n”, dbResult[j], dbResult [index] );

++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段

名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)

用一个扁平的形式来表示

}

printf( “-------/n” );

}

}

//到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite 提供的功能

来释放

sqlite3_free_table( dbResult );

//关闭数据库

sqlite3_close( db );

return 0;

}

到这个例子为止,sqlite3 的常用用法都介绍完了。

用以上的方法,再配上 sql 语句,完全可以应付绝大多数数据库需求。

但有一种情况,用上面方法是无法实现的:需要insert、select 二进制。当需要处理二进制

数据时,上面的方法就没办法做到。下面这一节说明如何插入二进制数据

(2)操作二进制

sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt * 。

这个数据类型记录了一个“sql语句”。为什么我把“sql语句” 用双引号引起来?因为你可以

把 sqlite3_stmt * 所表示的内容看成是 sql语句,但是实际上它不是我们所熟知的sql

语句。它是一个已经把sql语句解析了的、用sqlite自己标记记录的内部数据结构。

正因为这个结构已经被解析了,所以你可以往这个语句里插入二进制数据。当然,把二进制数据

插到 sqlite3_stmt 结构里可不能直接 memcpy ,也不能像 std::string 那样用 + 号。必须用 sqlite 提供的函数来插入。

i.1 写入二进制

下面说写二进制的步骤。

要插入二进制,前提是这个表的字段的类型是 blob 类型。我假设有这么一张表:

create table Tbl_2( ID integer, file_content blob )

首先声明

sqlite3_stmt * stat;

然后,把一个 sql 语句解析到 stat 结构里去:

sqlite3_prepare( db, “insert into Tbl_2( ID, file_content) values( 10, ? )”, -1, &stat, 0 );

上面的函数完成 sql 语句的解析。第一个参数跟前面一样,是个 sqlite3 * 类型变量,第

二个参数是一个 sql 语句。

这个 sql 语句特别之处在于 values 里面有个 ? 号。在sqlite3_prepare函数里,?号表示一个未定的值,它的值等下才插入。

第三个参数我写的是-1,这个参数含义是前面 sql 语句的长度。如果小于0,sqlite会自动计算它的长度(把sql语句当成以/0结尾的字符串)。

第四个参数是 sqlite3_stmt 的指针的指针。解析以后的sql语句就放在这个结构里。

第五个参数我也不知道是干什么的。为0就可以了。

如果这个函数执行成功(返回值是 SQLITE_OK 且 stat 不为NULL ),那么下面就可以开始插入二进制数据。

sqlite3_bind_blob( stat, 1, pdata, (int)(length_of_data_in_bytes), NULL ); // pdata为数据缓冲区,length_of_data_in_bytes为数据大小,以字节为单位

这个函数一共有5个参数。

第1个参数:是前面prepare得到的 sqlite3_stmt * 类型变量。

第2个参数:?号的索引。前面prepare的sql语句里有一个?号,假如有多个?号怎么插入?方法就是改变 bind_blob 函数第2个参数。这个参数我写1,表示这里插入的值要替换 stat 的第一个?号(这里的索引从1开始计数,而非从0开始)。如果你有多个?号,就写多个

bind_blob 语句,并改变它们的第2个参数就替换到不同的?号。如果有?号没有替换,sqlite 为它取值null。

第3个参数:二进制数据起始指针。

第4个参数:二进制数据的长度,以字节为单位。

第5个参数:是个析够回调函数,告诉sqlite当把数据处理完后调用此函数来析够你的数据。这个参数我还没有使用过,因此理解也不深刻。但是一般都填NULL,需要释放的内存自己用代码来释放。

bind完了之后,二进制数据就进入了你的“sql语句”里了。你现在可以把它保存到数据库里:int result = sqlite3_step( stat );

通过这个语句,stat 表示的sql语句就被写到了数据库里。

最后,要把 sqlite3_stmt 结构给释放:

sqlite3_finalize( stat ); //把刚才分配的内容析构掉

i.2 读出二进制

下面说读二进制的步骤。

跟前面一样,先声明 sqlite3_stmt * 类型变量:

sqlite3_stmt * stat;

然后,把一个 sql 语句解析到 stat 结构里去:

sqlite3_prepare( db, “select * from Tbl_2”, -1, &stat, 0 );

当 prepare 成功之后(返回值是 SQLITE_OK ),开始查询数据。

int result = sqlite3_step( stat );

这一句的返回值是 SQLITE_ROW 时表示成功(不是 SQLITE_OK )。

你可以循环执行 sqlite3_step 函数,一次 step 查询出一条记录。直到返回值不为SQLITE_ROW 时表示查询结束。

然后开始获取第一个字段:ID 的值。ID是个整数,用下面这个语句获取它的值:

int id = sqlite3_column_int( stat, 0 ); //第2个参数表示获取第几个字段内容,从0开始计算,因为我的表的ID字段是第一个字段,因此这里我填0

下面开始获取 file_content 的值,因为 file_content 是二进制,因此我需要得到它的指针,还有它的长度:

const void * pFileContent = sqlite3_column_blob( stat, 1 );

int len = sqlite3_column_bytes( stat, 1 );

这样就得到了二进制的值。

把 pFileContent 的内容保存出来之后,不要忘了释放 sqlite3_stmt 结构:

sqlite3_finalize( stat ); //把刚才分配的内容析构掉

i.3 重复使用 sqlite3_stmt 结构

如果你需要重复使用 sqlite3_prepare 解析好的 sqlite3_stmt 结构,需要用函数:sqlite3_reset。

result = sqlite3_reset(stat);

这样, stat 结构又成为 sqlite3_prepare 完成时的状态,你可以重新为它 bind 内容。(4)事务处理

sqlite 是支持事务处理的。如果你知道你要同步删除很多数据,不仿把它们做成一个统一的事务。

通常一次 sqlite3_exec 就是一次事务,如果你要删除1万条数据,sqlite就做了1万次:开始新事务->删除一条数据->提交事务->开始新事务->… 的过程。这个操作是很慢的。因为时间都花在了开始事务、提交事务上。

你可以把这些同类操作做成一个事务,这样如果操作错误,还能够回滚事务。

事务的操作没有特别的接口函数,它就是一个普通的 sql 语句而已:

分别如下:

int result;

result = sqlite3_exec( db, "begin transaction", 0, 0, &zErrorMsg ); //开始一个事务

result = sqlite3_exec( db, "commit transaction", 0, 0, &zErrorMsg ); //提交事务

result = sqlite3_exec( db, "rollback transaction", 0, 0, &zErrorMsg ); //回滚事务

一、给数据库加密

前面所说的内容网上已经有很多资料,虽然比较零散,但是花点时间也还是可以找到的。现在要说的这个——数据库加密,资料就很难找。也可能是我操作水平不够,找不到对应资料。但不管这样,我还是通过网上能找到的很有限的资料,探索出了给sqlite数据库加密的完整步骤。这里要提一下,虽然 sqlite 很好用,速度快、体积小巧。但是它保存的文件却是明文的。若不信可以用 NotePad 打开数据库文件瞧瞧,里面 insert 的内容几乎一览无余。这样赤裸裸的展现自己,可不是我们的初衷。当然,如果你在嵌入式系统、智能手机上使用 sqlite,最好是不加密,因为这些系统运算能力有限,你做为一个新功能提供者,不能把用户有限的运算能力全部花掉。

Sqlite为了速度而诞生。因此Sqlite本身不对数据库加密,要知道,如果你选择标准AES

算法加密,那么一定有接近50%的时间消耗在加解密算法上,甚至更多(性能主要取决于你算法编写水平以及你是否能使用cpu提供的底层运算能力,比如MMX或sse系列指令可以大幅度提升运算速度)。

Sqlite免费版本是不提供加密功能的,当然你也可以选择他们的收费版本,那你得支付2000块钱,而且是USD。我这里也不是说支付钱不好,如果只为了数据库加密就去支付2000块,我觉得划不来。因为下面我将要告诉你如何为免费的Sqlite扩展出加密模块——自己动手扩展,这是Sqlite允许,也是它提倡的。

那么,就让我们一起开始为 sqlite3.c 文件扩展出加密模块。

i.1 必要的宏

通过阅读 Sqlite 代码(当然没有全部阅读完,6万多行代码,没有一行是我习惯的风格,我可没那么多眼神去看),我搞清楚了两件事:

Sqlite是支持加密扩展的;

需要 #define 一个宏才能使用加密扩展。

这个宏就是

SQLITE_HAS_CODEC。

你在代码最前面(也可以在 sqlite3.h 文件第一行)定义:

#ifndef SQLITE_HAS_CODEC

#define SQLITE_HAS_CODEC

#endif

如果你在代码里定义了此宏,但是还能够正常编译,那么应该是操作没有成功。因为你应该会被编译器提示有一些函数无法链接才对。如果你用的是 VC 2003,你可以在“解决方案”里右键点击你的工程,然后选“属性”,找到“C/C ”,再找到“命令行”,在里面手工添加“/D "SQLITE_HAS_CODEC"”。

定义了这个宏,一些被 Sqlite 故意屏蔽掉的代码就被使用了。这些代码就是加解密的接口。尝试编译,vc会提示你有一些函数无法链接,因为找不到他们的实现。

如果你也用的是VC2003,那么会得到下面的提示:

error LNK2019: 无法解析的外部符号 _sqlite3CodecGetKey ,该符号在函数

_attachFunc 中被引用

error LNK2019: 无法解析的外部符号 _sqlite3CodecAttach ,该符号在函数

_attachFunc 中被引用

error LNK2019: 无法解析的外部符号 _sqlite3_activate_see,该符号在函数

_sqlite3Pragma 中被引用

error LNK2019: 无法解析的外部符号 _sqlite3_key ,该符号在函数 _sqlite3Pragma 中被引用

fatal error LNK1120: 4 个无法解析的外部命令

这是正常的,因为Sqlite只留了接口而已,并没有给出实现。

下面就让我来实现这些接口。

i.2 自己实现加解密接口函数

如果真要我从一份https://www.wendangku.net/doc/3918882228.html,网上down下来的 sqlite3.c 文件,直接摸索出这些接口的实现,我认为我还没有这个能力。

好在网上还有一些代码已经实现了这个功能。通过参照他们的代码以及不断编译中vc给出的错误提示,最终我把整个接口整理出来。

实现这些预留接口不是那么容易,要重头说一次怎么回事很困难。我把代码都写好了,直接把他们按我下面的说明拷贝到 sqlite3.c 文件对应地方即可。我在下面也提供了sqlite3.c 文件,可以直接参考或取下来使用。

这里要说一点的是,我另外新建了两个文件:crypt.c和crypt.h。

其中crypt.h如此定义:

#ifndef DCG_SQLITE_CRYPT_FUNC_

#define DCG_SQLITE_CRYPT_FUNC_

***********/

int My_DeEncrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key );

#endif

其中的 crypt.c 如此定义:

#include "./crypt.h"

#include "memory.h"

int My_Encrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key )

{

return 0;

}

int My_DeEncrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key )

{

return 0;

}

这个文件很容易看,就两函数,一个加密一个解密。传进来的参数分别是待处理的数据、数据长度、密钥、密钥长度。

处理时直接把结果作用于 pData 指针指向的内容。

你需要定义自己的加解密过程,就改动这两个函数,其它部分不用动。扩展起来很简单。

这里有个特点,data_len 一般总是 1024 字节。正因为如此,你可以在你的算法里使用一些特定长度的加密算法,比如AES要求被加密数据一定是128位(16字节)长。这个1024不是碰巧,而是 Sqlite 的页定义是1024字节,在sqlite3.c文件里有定义:

# define SQLITE_DEFAULT_PAGE_SIZE 1024

你可以改动这个值,不过还是建议没有必要不要去改它。

上面写了两个扩展函数,如何把扩展函数跟 Sqlite 挂接起来,这个过程说起来比较麻烦。我直接贴代码。

分3个步骤。

首先,在 sqlite3.c 文件顶部,添加下面内容:

#ifdef SQLITE_HAS_CODEC

#include "./crypt.h"

void sqlite3pager_free_codecarg(void *pArg);

#endif

这个函数之所以要在 sqlite3.c 开头声明,是因为下面在 sqlite3.c 里面某些函数里要插入这个函数调用。所以要提前声明。

其次,在sqlite3.c文件里搜索“sqlite3PagerClose”函数,要找到它的实现代码(而不是声明代码)。

实现代码里一开始是:

#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT

ThreadData *pTsd = sqlite3ThreadData();

assert( pPager );

assert( pTsd && pTsd->nAlloc );

#endif

需要在这部分后面紧接着插入:

#ifdef SQLITE_HAS_CODEC

sqlite3pager_free_codecarg(pPager->pCodecArg);

#endif

这里要注意,sqlite3PagerClose 函数大概也是 3.3.17版本左右才改名的,以前版本里是叫“sqlite3pager_close”。因此你在老版本sqlite代码里搜索

“sqlite3PagerClose”是搜不到的。

类似的还有“sqlite3pager_get”、“sqlite3pager_unref”、“sqlite3pager_write”、“sqlite3pager_pagecount”等都是老版本函数,它们在 pager.h 文件里定义。新版本对

应函数是在 sqlite3.h 里定义(因为都合并到 sqlite3.c和sqlite3.h两文件了)。所以,如果你在使用老版本的sqlite,先看看 pager.h 文件,这些函数不是消失了,也不是新蹦出来的,而是老版本函数改名得到的。

最后,往sqlite3.c 文件下找。找到最后一行:

在这一行后面,接上本文最下面的代码段。

这些代码很长,我不再解释,直接接上去就得了。

唯一要提的是 DeriveKey 函数。这个函数是对密钥的扩展。比如,你要求密钥是128位,即是16字节,但是如果用户只输入 1个字节呢?2个字节呢?或输入50个字节呢?你得对密钥进行扩展,使之符合16字节的要求。

DeriveKey 函数就是做这个扩展的。有人把接收到的密钥求md5,这也是一个办法,因为md5运算结果固定16字节,不论你有多少字符,最后就是16字节。这是md5算法的特点。但是我不想用md5,因为还得为它添加包含一些 md5 的.c或.cpp文件。我不想这么做。我自己写了一个算法来扩展密钥,很简单的算法。当然,你也可以使用你的扩展方法,也而可以使用 md5 算法。只要修改 DeriveKey 函数就可以了。

在 DeriveKey 函数里,只管申请空间构造所需要的密钥,不需要释放,因为在另一个函数里有释放过程,而那个函数会在数据库关闭时被调用。参考我的 DeriveKey 函数来申请内存。

这里我给出我已经修改好的 sqlite3.c 和 sqlite3.h 文件。

如果太懒,就直接使用这两个文件,编译肯定能通过,运行也正常。当然,你必须按我前面提的,新建 crypt.h 和 crypt.c 文件,而且函数要按我前面定义的要求来做。

i.3 加密使用方法:

现在,你代码已经有了加密功能。

你要把加密功能给用上,除了改 sqlite3.c 文件、给你工程添加 SQLITE_HAS_CODEC 宏,还得修改你的数据库调用函数。

前面提到过,要开始一个数据库操作,必须先 sqlite3_open 。

加解密过程就在 sqlite3_open 后面操作。

假设你已经 sqlite3_open 成功了,紧接着写下面的代码:

int i;

//添加、使用密码

i = sqlite3_key( db, "dcg", 3 );

//修改密码

i = sqlite3_rekey( db, "dcg", 0 );

用 sqlite3_key 函数来提交密码。

第1个参数是 sqlite3 * 类型变量,代表着用 sqlite3_open 打开的数据库(或新建数据库)。

第2个参数是密钥。

第3个参数是密钥长度。

用 sqlite3_rekey 来修改密码。参数含义同 sqlite3_key。

实际上,你可以在sqlite3_open函数之后,到 sqlite3_close 函数之前任意位置调用sqlite3_key 来设置密码。

但是如果你没有设置密码,而数据库之前是有密码的,那么你做任何操作都会得到一个返回值:SQLITE_NOTADB,并且得到错误提示:“file is encrypted or is not a database”。只有当你用 sqlite3_key 设置了正确的密码,数据库才会正常工作。

如果你要修改密码,前提是你必须先 sqlite3_open 打开数据库成功,然后 sqlite3_key 设置密钥成功,之后才能用 sqlite3_rekey 来修改密码。

如果数据库有密码,但你没有用 sqlite3_key 设置密码,那么当你尝试用 sqlite3_rekey 来修改密码时会得到 SQLITE_NOTADB 返回值。

如果你需要清空密码,可以使用:

//修改密码

i = sqlite3_rekey( db, NULL, 0 );

来完成密码清空功能。

i.4 sqlite3.c 最后添加代码段

#ifdef SQLITE_HAS_CODEC

#define CRYPT_OFFSET 8

typedef struct _CryptBlock

{

BYTE* ReadKey; // 读数据库和写入事务的密钥

BYTE* WriteKey; // 写入数据库的密钥

int PageSize; // 页的大小

BYTE* Data;

} CryptBlock, *LPCryptBlock;

#ifndef DB_KEY_LENGTH_BYTE

#define DB_KEY_LENGTH_BYTE 16

#endif

#ifndef DB_KEY_PADDING

#define DB_KEY_PADDING 0x33

#endif

void sqlite3CodecGetKey(sqlite3* db, int nDB, void** Key, int* nKey)

{

return ;

}

int sqlite3CodecAttach(sqlite3 *db, int nDb, const void *pKey, int nKeyLen);

void sqlite3_activate_see(const char* right )

{

return;

}

int sqlite3_key(sqlite3 *db, const void *pKey, int nKey);

int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey);

// 从用户提供的缓冲区中得到一个加密密钥

// 用户提供的密钥可能位数上满足不了要求,使用这个函数来完成密钥扩展

static unsigned char * DeriveKey(const void *pKey, int nKeyLen);

//创建或更新一个页的加密算法索引.此函数会申请缓冲区.

static LPCryptBlock CreateCryptBlock(unsigned char* hKey, Pager *pager, LPCryptBlock pExisting);

//加密/解密函数, 被pager调用

void * sqlite3Codec(void *pArg, unsigned char *data, Pgno nPageNum, int nMode);

//设置密码函数

int __stdcall sqlite3_key_interop(sqlite3 *db, const void *pKey, int nKeySize);

// 修改密码函数

int __stdcall sqlite3_rekey_interop(sqlite3 *db, const void *pKey, int nKeySize);

//销毁一个加密块及相关的缓冲区,密钥.

static void DestroyCryptBlock(LPCryptBlock pBlock);

static void * sqlite3pager_get_codecarg(Pager *pPager);

void sqlite3pager_set_codec(Pager *pPager,void

*(*xCodec)(void*,void*,Pgno,int),void *pCodecArg );

//加密/解密函数, 被pager调用

void * sqlite3Codec(void *pArg, unsigned char *data, Pgno nPageNum, int nMode)

{

LPCryptBlock pBlock = (LPCryptBlock)pArg;

unsigned int dwPageSize = 0;

if (!pBlock) return data;

// 确保pager的页长度和加密块的页长度相等.如果改变,就需要调整.

if (nMode != 2)

{

PgHdr *pageHeader;

pageHeader = DATA_TO_PGHDR(data);

if (pageHeader->pPager->pageSize != pBlock->PageSize)

{

CreateCryptBlock(0, pageHeader->pPager, pBlock);

}

}

switch(nMode)

{

case 0: // Undo a "case 7" journal file encryption

case 2: //重载一个页

case 3: //载入一个页

if (!pBlock->ReadKey) break;

dwPageSize = pBlock->PageSize;

My_DeEncrypt_Func(data, dwPageSize, pBlock->ReadKey,

DB_KEY_LENGTH_BYTE );

break;

case 6: //加密一个主数据库文件的页

if (!pBlock->WriteKey) break;

memcpy(pBlock->Data CRYPT_OFFSET, data, pBlock->PageSize); data = pBlock->Data CRYPT_OFFSET;

dwPageSize = pBlock->PageSize;

My_Encrypt_Func(data , dwPageSize, pBlock->WriteKey,

DB_KEY_LENGTH_BYTE );

break;

case 7: //加密事务文件的页

if (!pBlock->ReadKey) break;

memcpy(pBlock->Data CRYPT_OFFSET, data, pBlock->PageSize); data = pBlock->Data CRYPT_OFFSET;

dwPageSize = pBlock->PageSize;

My_Encrypt_Func( data, dwPageSize, pBlock->ReadKey,

DB_KEY_LENGTH_BYTE );

break;

}

return data;

//

销毁一个加密块及相关的缓冲区,密钥.

static void DestroyCryptBlock(LPCryptBlock pBlock)

{

//销毁读密钥.

if (pBlock->ReadKey){

sqliteFree(pBlock->ReadKey);

}

//如果写密钥存在并且不等于读密钥,也销毁.

if (pBlock->WriteKey && pBlock->WriteKey != pBlock->ReadKey){ sqliteFree(pBlock->WriteKey);

}

if(pBlock->Data){

sqliteFree(pBlock->Data);

}

//释放加密块.

sqliteFree(pBlock);

}

static void * sqlite3pager_get_codecarg(Pager *pPager)

{

return (pPager->xCodec) ? pPager->pCodecArg: NULL;

}

// 从用户提供的缓冲区中得到一个加密密钥

static unsigned char * DeriveKey(const void *pKey, int nKeyLen) {

unsigned char * hKey = NULL;

int j;

if( pKey == NULL || nKeyLen == 0 )

{

return NULL;

}

hKey = sqliteMalloc( DB_KEY_LENGTH_BYTE 1 );

if( hKey == NULL )

{

return NULL;

}

hKey[ DB_KEY_LENGTH_BYTE ] = 0;

if( nKeyLen < DB_KEY_LENGTH_BYTE )

{

memcpy( hKey, pKey, nKeyLen ); //先拷贝得到密钥前面的部分

j = DB_KEY_LENGTH_BYTE - nKeyLen;

//补充密钥后面的部分

memset( hKey nKeyLen, DB_KEY_PADDING, j );

}

else

{ //密钥位数已经足够,直接把密钥取过来

memcpy( hKey, pKey, DB_KEY_LENGTH_BYTE );

}

return hKey;

}

//创建或更新一个页的加密算法索引.此函数会申请缓冲区.

static LPCryptBlock CreateCryptBlock(unsigned char* hKey, Pager *pager, LPCryptBlock pExisting)

{

LPCryptBlock pBlock;

if (!pExisting) //创建新加密块

{

pBlock = sqliteMalloc(sizeof(CryptBlock));

memset(pBlock, 0, sizeof(CryptBlock));

pBlock->ReadKey = hKey;

pBlock->WriteKey = hKey;

pBlock->PageSize = pager->pageSize;

pBlock->Data = (unsigned char*)sqliteMalloc(pBlock->PageSize

CRYPT_OFFSET);

}

else //更新存在的加密块

pBlock = pExisting;

if ( pBlock->PageSize != pager->pageSize && !pBlock->Data){ sqliteFree(pBlock->Data);

pBlock->PageSize = pager->pageSize;

pBlock->Data = (unsigned char*)sqliteMalloc(pBlock->PageSize CRYPT_OFFSET);

}

}

memset(pBlock->Data, 0, pBlock->PageSize CRYPT_OFFSET);

return pBlock;

}

void sqlite3pager_set_codec(

Pager *pPager,

void *(*xCodec)(void*,void*,Pgno,int),

void *pCodecArg

)

{

pPager->xCodec = xCodec;

pPager->pCodecArg = pCodecArg;

}

int sqlite3_key(sqlite3 *db, const void *pKey, int nKey)

{

return sqlite3_key_interop(db, pKey, nKey);

}

int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey)

{

return sqlite3_rekey_interop(db, pKey, nKey);

}

int sqlite3CodecAttach(sqlite3 *db, int nDb, const void *pKey, int nKeyLen)

{

int rc = SQLITE_ERROR;

unsigned char* hKey = 0;

Office办公文秘使用技巧_秘书基础

Office办公文秘使用技巧_秘书基础 “。接着单击“格式”为数字设置一些特殊格式,比如字体加大、文字加粗以及特殊颜色等。最后单击“全部替换”就可以了。不过要注意,它会让文档中的所有数字都改变的。 查找对话框中的快捷键 执行“编辑-查找”命令,或者按“Ctrl+F”键调出查找对话框,会发现对话框中的许多项目之后都有一个带下划线的字母,这就是此项的快捷键了,不过一定要先按Alt键才能让它们起作用,比如按“Alt+F”,是查找下一处,按“Alt+M”是打开高级选项,按Alt+D/P/G,是在查找、替换、定位这三个选项卡中切换等(本技巧同样适合其它的对话框)。 另外,在office20xx中进行查找/替换时,我们经常会在不关闭查找/替换对话框的情况下,切换到正文中进行修改,然后再回到查找/替换对话框中继续操作,一般都是通过鼠标点击进行切换,其实直接按Ctrl+Tab键就可以了,非常方便。 在最后一次搜索结果中快速浏览 当你搜索完毕,退出查找对话框后,如果想回过头看看刚才的搜索结果,这时不用再打开查找对话框,直接按Ctrl+PageUp键或Ctrl+PageDown键,就可以在上一次的搜索结果中快速浏览了。 高亮显示所有搜索出来的结果 为了让搜索出来的结果更醒目,可以让搜索的结果内容高亮显示出来。操作很简单:在查找对话框中选中“突出显示所有在该范围找出的项目”就可以了。 替换时巧妙保留书签

假设在word中有这么一段文本:This agreement between [John Doel] and [Mary Smith] is entered into freely and without compulsion. 其中括号括起来的部分表示定义了书签,括号是为了让大家看的清楚,真实文本中并没有出现。如果在进行替换操作时,将两个人物名称换成了其它人名,那么书签也会随之丢失。大家在定义书签时,将人名前后的空格都包括进来,如下所示:This agreement between[ John Doel ]and[ Mary Smith ]is entered into freely and without compulsion. 使用图片替换文本 有时我们可能想用图片来替换某些文本,比如,你可能想用公司的Logo图片来替换文档中的所有公司名称,可通过下面的步骤来实现: 第一步:图片插入到文档中,选取它,再按Ctrl+X键剪切把它放到系统的剪贴板中。 第二步:按“Ctrl+H”键调出替换对话框,在“查找内容”中输入要替换的文本,在“替换为”中输入“”(不含引号,下同)。 第三步:可以单击“查找下一处”、“替换”一个一个替换,也可以单击“全部替换”一次性全部替换。这时文档中的被替换的文字,就都会成图论文,会大量出现一些同样的术语或关键词,如果想让这些术语或关键词有一个统一的格式,不用一个一个设置,用替换功能很快就能完成。 第一步:找到要设置格式的第一个术语或关键词(如:“虚拟现实”),设置它的大小、字体、颜色等格式。选中设置好的术语,按“Ctrl+C”键将它复制到剪切板上。 第二步:按“Ctrl+H”键调出替换对话框,在“查找内容”中输入“虚拟

office办公软件使用技巧大全

办公软件使用技巧 1.同时保存所有打开的Word文档 有时在同时编辑多个Word文档时,每个文件要逐一保存,既费时又费力,有没有简单的方法呢?在按下Shift键的同时,单击“文件”菜单,大家看,已经多出了“同时保存”和“同时关闭”命令,这可就方便多了 2.巧妙设置文档保护 在用Word 2000/XP打印一份文件时,忽然头儿有要事吩咐,要暂时离开一下,关闭文件吧,既费事又没必要,但又不想辛辛苦苦写的文件被别人破坏了。怎么办呢?执行“工具”菜单中的“保护文档”命令,在弹出的窗口中选择“保护窗体”,然后设上密码。怎么样,光标跑到了文件头,任你怎么移动鼠标、敲击键盘就是无法编辑了,不错吧。等回来时,执行“工具”菜单中的“解除文档保护”命令,一切又正常了。 3.编辑长文件更轻松 相信大家都有这样的经历:在使用Excel、Word编辑长文档时,有时需要将文章开始的多处内容复制到文章末尾。但通过拖动滚动条来回移动非常麻烦,还会出错。其实只要将鼠标移动到滚动条上面的适当位置,发现鼠标指针变成双箭头,此时按住鼠标左键

向下拖动,文档编辑区会被一分为二。你只需在上面编辑区找到文章开头的内容,在下面编辑区找到需要粘贴的位置,这样你就可以复制内容了,而不必来回切换。这种方法特别适合复制相距很远且处数较多的内容。 4.给WPS文档添加水印 先用作图软件(画笔工具等)制作一张色彩非常淡的图片(直接将Word的水印效果图“抓”下来也行),然后打开需要添加水印的WPS文档,执行“格式→页面背景→设置”命令,打开“设置背景”对话框,切换到“图片”标签下,按“选择图片”按钮,选中刚才制作的图片,并进行适当设置后确定,就可以为文档设置上水印了。5.在金山文字中快速打开“页面设置” 在用金山文字2002处理文档时,一个最常用的操作就是设置页面。先执行“视图→标尺→水平(垂直)标尺”命令,展开“水平(垂直)标尺”打开,然后用鼠标在水平(垂直)标尺上双击,即可快速打开“页面设置”对话框,对页面进行设置了。 6.在Excel中插入拼音 在我们使用Excel时,常常会遇到十分孤僻的字,但加上拼音注释就能使人看得更明白。具体的方法是:选中想要加入拼音注释的表格,打开Excel的菜单栏中的“格式”菜单,选中“拼音信息/设置”

office使用窍门-office办公软件使用技巧大全

office办公软件使用技巧大全 1. 对Excel中的数据四舍五入 在Excel中的“四舍五入”函数—ROUND函数,它可以返回某个数值按指定位数四舍五入后的数值。只要在Excel提供的“数学与三角函数”中找到这个名为ROUND(number,num_digits)的函数。这个函数有两个参数,分别是number和num_digits。其 中number就是将要进行四舍五入的数值(或用公式计算的结果);num_digits则是希望得到的数值的小数点后的位数。 2. 让Word也能编辑WPS文件 目前,在中国大陆使用得最广泛的办公软件当数Word和WPS 了。然而这为资源的共享带来了一定的问题。如果想用Wordz编辑WPS文档,你得首先安装WPS文件转换器安装程序。该安装程序可在https://www.wendangku.net/doc/3918882228.html,/softwareview.asp?softwareid=13925下载。双击安装该转换器,就可以使Word打开WPS文件格式。 在Word97/2000中测试成功。 鼠标点击选文的秘密 3. Word文档中将鼠标挪至屏幕左侧空白处,鼠标会由“I”形变为一个向右的斜箭头,单击,可选择一行;双击,可选择一段;三击,可全选。三击鼠标,对大多数人来说,还比较陌生,但很方便,你不妨一试。当然,全选有很多种方法,你可以按住鼠标左键拖曳至所需之处。你还可以用“Ctrl+A”,你也可以点击“编辑”菜单,选择“全选”。如果鼠标在段落中,双击,可选择一个词;三击,可选择这一段。 4. 高效跨页选取段落

许多人翻页会采取拖曳的方式,因不容易控制,往往很难做到准确。其实界面的最下面一行,有几个按钮,“录制”、“修订”、“扩展”、“改写”,平时总是灰色的,要应用它,必须双击使之变黑。要跨页选取段落,先单击你要选取的起始点,再将“扩展”激活,然后翻页找到你需要的终点,单击,这中间一大块就以反白的形式选择好了。如果想追加选择,不断地点击下去就是了,不必从头再来。还有一种更为简单的方法:单击要选取的段落的起点,翻页找到终点,按住Shift键再单击鼠标,即可以准确地选中你所需的部分。 Word计量单位“磅”变“厘米” 5. 平时我们大家在办公用Word的时候,是不是发现表格属性全都是以“磅”为单位的。这根本不符合中国的习惯和标准要求。要修改它先是点击“工具”菜单,然后选择“选项”栏,在弹出的对话框中点击“常规”选项,将计量单位改为“厘米”即可。 6. Excel中同时设置多个工作表单 使用Excel进行表单及数据的处理,常遇有许多工作表需要同时改变相同属性的情况。我们将鼠标置于工作表的切换窗口,点击右键,在弹出菜单项中选择“选定全部工作表”,其间所作设置会在“工作组”中令所有工作表生效。如果你所处理的表格为相同的格式,也可同时添加或删除相同的行和列,表格中对应的行或列的数值、内容也可进行设定,甚至对相同单元格中应用函数(公式)也能全部进行更改和替换。 7. 保持文档中图表的完整

office word使用技巧大全(超全)讲课讲稿

o f f i c e w o r d使用技巧大全(超全)

不收藏不行的word使用技巧大全 三招去掉页眉那条横线 1、在页眉中,在“格式”-“边框和底纹”中设置表格和边框为“无”,应用于“段落” 2、同上,只是把边框的颜色设置为白色(其实并没有删的,只是看起来没有了,呵呵) 3、在“样式”栏里把“页眉”换成“正文”就行了——强烈推荐! 会多出--(两个横杠) 这是用户不愿看到的,又要多出一步作删除-- 解决方法:替换时在前引号前加上一个空格问题就解决了 插入日期和时间的快捷键 Alt+Shift+D:当前日期 Alt+Shift+T:当前时间 批量转换全角字符为半角字符

首先全选。然后“格式”→“更改大小写”,在对话框中先选中“半角”,确定即可 Word启动参数简介 单击“开始→运行”命令,然后输入Word所在路径及参数确定即可运行,如“C:\ PROGRAM FILES \MICROSOFT Office \Office 10\ WINWord.EXE /n”,这些常用的参数及功能如下: /n:启动Word后不创建新的文件。 /a:禁止插件和通用模板自动启动。 /m:禁止自动执行的宏。 /w:启动一个新Word进程,独立与正在运行的Word进程。 /c:启动Word,然后调用Netmeeting。 /q:不显示启动画面。 另外对于常需用到的参数,我们可以在Word的快捷图标上单击鼠标右键,然后在“目标”项的路径后加上该参数即可。 快速打开最后编辑的文档

如果你希望Word在启动时能自动打开你上次编辑的文档,可以用简单的宏命令来完成: (1)选择“工具”菜单中的“宏”菜单项,单击“录制新宏”命令打开“录制宏”对话框; (2)在“录制宏”对话框中,在“宏名”输入框中输入“autoexec”,点击“确定”; (3)从菜单中选择“文件”,点击最近打开文件列表中显示的第一个文件名;并“停止录制”。保存退出。下次再启动Word时,它会自动加载你工作的最后一个文档。 格式刷的使用 1、设定好文本1的格式。 2、将光标放在文本1处。 3、单击格式刷按钮。 4、选定其它文字(文本2),则文本2的格式与文本1 一样。 若在第3步中单击改为双击,则格式刷可无限次使用,直到再次单击格式刷(或按Esc键)为止。 删除网上下载资料的换行符(象这种“↓”)

☆超全实用Office使用技巧方法大全

Excel 使用技巧集锦——163种技巧(多加练习,定有成功) 目录 一、基本方法7 1.快速选中全部工作表7 2.快速启动E XCEL7 3.快速删除选定区域数据7 4.给单元格重新命名7 5.在E XCEL中选择整个单元格范围 8 6.快速移动/复制单元格 8 7.快速修改单元格式次序8 8.彻底清除单元格内容8 9.选择单元格8 10.为工作表命名9 11.一次性打开多个工作簿9 12.快速切换工作簿9 13.选定超级链接文本(微软O FFICE技巧大赛获奖作品)10 14.快速查找10 15.修改默认文件保存路径10 16.指定打开的文件夹10 17.在多个E XCEL工作簿间快速切换 10 18.快速获取帮助11 19.创建帮助文件的快捷方式11 20.双击单元格某边移动选定单元格11 21.双击单元格某边选取单元格区域11 22.快速选定不连续单元格11 23.根据条件选择单元格11 24.复制或移动单元格12

25.完全删除E XCEL中的单元格 12 26.快速删除空行12 27.回车键的粘贴功能12 28.快速关闭多个文件12 29.选定多个工作表13 30.对多个工作表快速编辑13 31.移动和复制工作表13 32.工作表的删除13 33.快速选择单元格13 34.快速选定E XCEL区域(微软O FFICE技巧大赛获奖作品) 13 35.备份工件簿14 36.自动打开工作簿14 37.快速浏览长工作簿14 38.快速删除工作表中的空行14 39.绘制斜线表头14 40.绘制斜线单元格15 41.每次选定同一单元格15 42.快速查找工作簿15 43.禁止复制隐藏行或列中的数据15 44.制作个性单元格16 二、数据输入和编辑技巧16 1.在一个单元格内输入多个值16 2.增加工作簿的页数16 3.奇特的F4键 16 4.将格式化文本导入E XCEL17 5.快速换行17 6.巧变文本为数字17 7.在单元格中输入0值17 8.将数字设为文本格式18

office办公软件使用技巧大全1(1-62项)★

office办公软件使用技巧大全 1.对Excel中的数据四舍五入 在Excel中的“四舍五入”函数—ROUND函数,它可以返回某个数值按指定位数四舍五入后的数值。只要在Excel提供的“数学与三角函数”中找到这个名为ROUND(number,num_digits)的函数。这个函数有两个参数,分别是number和num_digits。其中number 就是将要进行四舍五入的数值(或用公式计算的结果);num_digits 则是希望得到的数值的小数点后的位数。 2.让Word也能编辑WPS文件 目前,在中国大陆使用得最广泛的办公软件当数Word和WPS 了。然而这为资源的共享带来了一定的问题。如果想用Wordz编辑WPS文档,你得首先安装WPS文件转换器安装程序。该安装程序可在https://www.wendangku.net/doc/3918882228.html,/softwareview.asp?softwareid=13925下载。双击安装该转换器,就可以使Word打开WPS文件格式。在Word97/2000中测试成功。 3.鼠标点击选文的秘密 Word文档中将鼠标挪至屏幕左侧空白处,鼠标会由“I”形变为一个向右的斜箭头,单击,可选择一行;双击,可选择一段;三击,可全选。三击鼠标,对大多数人来说,还比较陌生,但很方便,你不妨一试。当然,全选有很多种方法,你可以按住鼠标左键拖曳至所需之处。你还可以用“Ctrl+A”,你也可以点击“编辑”菜单,选择“全选”。如果鼠标在段落中,双击,可选择一个词;三击,可选择这一段。

4.高效跨页选取段落 许多人翻页会采取拖曳的方式,因不容易控制,往往很难做到准确。其实界面的最下面一行,有几个按钮,“录制”、“修订”、“扩展”、“改写”,平时总是灰色的,要应用它,必须双击使之变黑。要跨页选取段落,先单击你要选取的起始点,再将“扩展”激活,然后翻页找到你需要的终点,单击,这中间一大块就以反白的形式选择好了。如果想追加选择,不断地点击下去就是了,不必从头再来。还有一种更为简单的方法:单击要选取的段落的起点,翻页找到终点,按住Shift键再单击鼠标,即可以准确地选中你所需的部分。 5.Word计量单位“磅”变“厘米” 平时我们大家在办公用Word的时候,是不是发现表格属性全都是以“磅”为单位的。这根本不符合中国的习惯和标准要求。要修改它先是点击“工具”菜单,然后选择“选项”栏,在弹出的对话框中点击“常规”选项,将计量单位改为“厘米”即可。 6.Excel中同时设置多个工作表单 使用Excel进行表单及数据的处理,常遇有许多工作表需要同时改变相同属性的情况。我们将鼠标置于工作表的切换窗口,点击右键,在弹出菜单项中选择“选定全部工作表”,其间所作设置会在“工作组”中令所有工作表生效。如果你所处理的表格为相同的格式,也可同时添加或删除相同的行和列,表格中对应的行或列的数值、内容也可进行设定,甚至对相同单元格中应用函数(公式)也能全部进行更改和替换。 7.保持文档中图表的完整

office办公软件操作实用技巧大全

Word,PDF,PPT,TXT之间的转换方法 一、把PPT转WORD形式的方法 1.利用"大纲"视图打开PPT演示文稿,单击"大纲",在左侧"幻灯片/大纲”任务窗格的“大纲”选项卡里单击一下鼠标,按"Ctrl+A"组合健全选内容,然后使用"Ctrl+C"组合键或右键单击在快捷菜单中选择"复制"命令,然后粘贴到Word里。 提示:这种方法会把原来幻灯片中的行标、各种符号原封不动的复制下来。2.利用"发送"功能巧转换打开要转换的PPT幻灯片,单击"文件"→"发送"→"MicrosoftWord"菜单命令。然后选择"只使用大纲"单选按钮并单击"确定"按钮,等一会就发现整篇PPT文档在一个Word文档里被打开。 提示:在转换后会发现Word有很多空行。在Word里用替换功能全部删除空行可按"Ctrl+H"打开"替换"对话框,在"查找内容"里输入"^p^p",在"替换为"里输入"^p",多单击几次"全部替换"按钮即可。("^"可在英文状态下用"Shift+6"键来输入。)3.利用"另存为"直接转换打开需要转换的幻灯片,点击"文件"→"另存为",然后在"保存类型"列表框里选择存为"rtf"格式。现在用Word 打开刚刚保存的rtf文件,再进行适当的编辑即可实现转换。4.PPTConverttoDOC软件转换PPTConverttoDOC是绿色软,解压后直接运行,在运行之前请将Word和PPT程序都关闭。选中要转换的PPT文件,直接拖曳到"PPTConverttoDOC"程序里。单击工具软件里的"开始"按钮即可转换,转换结束后程序自动退出。 提示:如果选中"转换时加分隔标志",则会在转换好的word文档中显示当

最新office办公软件使用技巧大全

o f f i c e办公软件使用 技巧大全

一、WORD技巧 (3) 1、动态调整法 (4) 2、设置常用行距 (4) 3、查看格式 (4) 4、保存嵌入字体 (5) 5、设置自动保存时间间隔 (6) 6、一次保存/关闭所有打开的文档 (7) 7、改变文件保存位置 (7) 8、改变默认保存文件类型 (8) 9、逆页序打印 (8) 10、同一文档不同页面方向 (9) 11、折页打印 (10) 12、打印到特殊大小纸张 (10) 13、转换为PPT (10) 14、合并表格 (11) 15、合并文档 (11) 1)复制粘贴 (11) 2)合并到打开文档 (11) 3)合并到当前文档 (12) 4)合并到新文档 (12) 16、查找格式 (13) 17、文档前后对照 (13) 18、在打印预览界面下编辑文档 (13) 19、文档结构图 (14) 20、缩略图 (14) 21、加密保存并删除隐私 (14) 22、解除文档非法退出时的锁定 (16) 23、修复文档 (16) 24、抢救未保存的文档 (17) 1)保存过 (17) 2)未保存 (17) 25、首字下沉 (19) 26、页面边框 (19) 27、不同的页眉页脚 (20) 1)手工设置 (20) 2)自动设置 (21) 28、去除页眉/页脚的下划线 (22) 29、文字动态效果 (22) 30、稿纸格式 (23) 31、添加背景音乐 (23) 32、页码美化 (25) 33、计算表格数据 (25) 1)计算行或列中数值的总和 (26) 2)其他计算 (26)

34、文字排序 (27) 35、个性工具栏 (27) 36、去除自动更正功能 (28) 37、绘图网格调整 (28) 38、WORD宏篇 (28) 1)创建宏 (29) 2)执行要包含在宏中的操作 (29) 3)要停止录制宏,请单击“停止录制”。 (29) 4)运行宏 (29) 3)删除宏 (30) 39、做简单的翻译器 (30) 40、校对文档用语音 (32) 41、让Word也有一个“收藏夹” (32) 42、能英汉双向翻译 (33) 43、给词语快速添加注解 (34) 44、公历、农历双向转换 (34) 45、变成中文大写金额 (34) 46、轻松打印条形码 (35) 47、在Word中输入英语音标 (35) 48、Word 2003中的文字也可以任意旋转 (36) 49、修改Word 2003默认设置 (38) 1)默认图片环绕方式 (38) 2)对象的精确调整 (39) 3)告别绘图画布 (39) 4)自选图形的默认格式 (40) 5)启动时打开常用输入法 (40) 6)按像素显示图形尺寸 (41) 50、多栏设置页码 (41) 51、插图编号 (42) 52、元素的交叉引用 (44) 53、创建图表目录 (46) 54、调整行序 (46) 55、单栏多栏混排 (47) 56、分节后重复页码的打印 (49) 57、Word里利用填充效果把图片裁剪成异形 (50) 58、略施小计我让Word帮助我学习日语 (53) 59、各种电子图书馆文章转为Word文档的方法 (56) 1、PDF文件的识别 (56) 2、caj文件的识别: (57) 3、超星文件的识别: (57) 4、其他情况下的识别: (58) 60、Word、Excel配合按人头打印工资条 (58) 1、创建Excel数据表 (58) 2、创建Word模板 (59)

office使用技巧大全集下

WORD应用技巧大全11 1、字体文件格式 在Windows 98中,系统使用得最多的就是*.TTF(True Type)轮廓字库文件,它既能显示也能打印,并且支持无极变倍,在任何情况下都不会出现锯齿问题。而*.FOT则是与*.TTF文件对应的字体资源文件,它是TTF字体文件的资源指针,指明了系统所使用的TTF文件的具体位置,而不用必须指定到FONTS文件夹中。*.FNT(矢量字库)和*.FON(显示字库)的应用范围都比较广泛。另外,那些使用过老版本的WPS的用户可能对*.PS文件还有一定的印象,*.PS实际上是DOS下轮廓字库的一种形式,其性能与*.TTF基本类似,采用某些特殊方法之后,我们甚至还可以实现在Windows中直接使用这些*.PS字库(*.PS1、*.PS2都是PS字库)。 2、巧用Word分节符 在Word的6.0至Word 2002版本中,我们每次开启一个新的空白文档时,都可以在Word窗口的左下角发现"1页1节"的字样。由此我们可以知道,在此文档中,只包含一个"节"。那么,什么是"节"呢?所谓的"节",就是Word用来划分文档的一种方式。之所以引入"节"的概念,是因为我们在编辑文档的时候,有时并不是从头到尾所有的页面都采用相同的外观。例如,在某些文档中,可能会使用较宽的表格,这时我们就希望这个带有表格文档的页面可以进行"旋转",以便能够取得更好的显示效果。这时候就需要利用"分节"的技术,来控制某个特定页面的版式属性。本文就以Word的最新版本Word 2002为例,跟大家讨论一下有关"节"的方方面面。 分节符所包含的信息 分节符可以包含以下信息: 页面方向(横向或纵向)、页边距、分栏状态、纵向对齐方式、行号、页眉和页脚样式、页码、纸型大小及纸张来源。 插入分节符 插入分节符的办法为,选择"插入"*"分隔符",弹出"分节符"对话框(如图1所示)。然后选择合适的分节符类型,点击"确定"按钮即可。注意: 我们可以把分节符当作一种隐藏的代码,它包含了所在的位置之前页面的各种信息(注意:一定是其所在位置之前的,用户在删除分节符的时候,了解这一概念非常必要)。

WPS Office使用技巧大集合

WPS Office使用技巧大集合 出处:多特软件站时间:2010-12-21 人气:218 次 核心提示:今天给大家介绍几招wps文字的使用技巧,希望可以对大家在使用时带来帮助。 相关问题更多>> ?·wps文件转换到CoreLDRAW中去排版?·Microsoft Office补丁安装失败, ?·wps office 2007个人版无法打开.相关资讯:更多>> ?·免费办公软件WPS Office 2试用 ?·WPS南非世界杯赛程表助你转世界 ?·金山旗下WPS Office个人版载量 今天给大家介绍几招wps文字的使用技巧,希望可以对大家在使用时带来帮助。 1、在WPS中计算某一字符串出现的次数 在WPS中怎样统计某个字符串在文章中出现的次数呢?能够这样做:运用“替换”对话框,在“查找内容”和“替换为”的对话框中填入欲统计的字符串,按“所有替换”命令。执行完命令后,WPS会弹出对话框提示有XX个被替换,XX就是该字符串出现的次数。 2、用格式刷多次复制格式 大众都习性这样运用格式刷:选中所要复制的格式文字,单击格式刷按钮,然后将格式刷光标移动到所要格式化的文字位置,按鼠标左键拖曳所选范围,放开左键,实现了格式复制。要多次复制一种格式,则多次重复刚才的步骤。 WPS文字中提供了多次复制格式的方法:选中要复制的格式文字,双击格式刷按钮,然后开始在文中复制格式,你会发现现在可以复制多个位置了,完成格式复制之后,按ESC键即可退出格式刷。 3、打印或预览多页的表格中每一页都看到标题 WPS文字中超过一页的表格,可能会这样处理:把标题复制到每一页的开始部分,以确保每一页的表格都有标题。但是假如你对文章内容执行添加或删除,都会造成重新分页,你先前复制标题可能会跑到页的其它位置。 你能够这样做:选中表格的主题行,在“表格”菜单中挑选“标题行重复”选项。当你预览或打印文件时,你就会发觉每一页的表格都有标题了。 4、让WPS粘贴操作对你心领神会的设置

office办公软件操作技巧大全--资料

Word , PDF , PPT ,TXT 之间的转换方法 一、把 PPT 转 WORD 形式的方法 1 .利用 "大纲 "视图打开PPT演示文稿,单击"大纲",在左侧"幻灯片/大纲”任务窗格的“大纲”选项卡里单击一下鼠标,按"Ctrl+A" 组合健全选内容,然后 使用 "Ctrl+C" 组合键或右键单击在快捷菜单中选择"复制 " 命令,然后粘贴到Word 里。 提示:这种方法会把原来幻灯片中的行标、各种符号原封不动的复制下来。 2 .利用 "发送 "功能巧转换打开要转换的PPT 幻灯片,单击 "文件 "→ "发送 "→ "MicrosoftWord" 菜单命令。然后选择 "只使用大纲 "单选按钮并单击 "确定 "按钮,等一会就发现整篇PPT 文档在一个 Word 文档里被打开。 提示:在转换后会发现Word有很多空行。在Word里用替换功能全部删除空行可按 "Ctrl+H" 打开 "替换 "对话框,在 "查找内容 "里输入 "^p^p" ,在 "替换为 "里输入 "^p" ,多单击几次 "全部替换 "按钮即可。 ("^" 可在英文状态下用 "Shift+6" 键来输入。 )3 .利用 "另存为 "直接转换打开需要转换的幻灯片,点击" 文件 "→ "另存为 ",然后在 "保存类型 "列表框里选择存为 "rtf" 格式。现在用 Word 打开刚刚保存的rtf 文件,再进行适当的编辑即可实现转换。 4 .PPTConverttoDOC软件转换PPTConverttoDOC是绿色软,解压后直接运行,在运行之前请将Word 和 PPT 程序都关闭。选中要转换的PPT 文件,直

Office(Excel、PPT、Word)使用技巧方法大全

12 、基本方法7 1. 快速选中全部工作表 7 2. 快速启动E XCEL 7 3. 快速删除选定区域数据 7 4. 给单元格重新命名 8 5. 在E XCEL 中选择整个单元格范围 8 6. 快速移动/复制单元格 8 7. 快速修改单元格式次序 9 8. 彻底清除单元格内容 9 9. 选择单元格 9 10. 为工作表命名 10 11. 一次性打开多个工作簿 10 12. 快速切换工作簿 11 13. 选定超级链接文本(微软 O FFICE 技巧大赛获奖作品) 14. 快速查找12 15. 修改默认文件保存路径 12 16. 指定打开的文件夹 12 17. 在多个E XCEL 工作簿间快速切换 13 18. 快速获取帮助13 19. 创建帮助文件的快捷方式 13 20. 双击单元格某边移动选定单元格 14 21. 双击单元格某边选取单元格区域 14 22. 快速选定不连续单元格 14 23. 根据条件选择单元格 15

24. 复制或移动单元格 15 25. 完全删除E XCEL中的单元格15 26. 快速删除空行15 27. 回车键的粘贴功能 16 28. 快速关闭多个文件16 29. 选定多个工作表16 30. 对多个工作表快速编辑16 31. 移动和复制工作表17 32. 工作表的删除17 33. 快速选择单元格17 34. 快速选定E XCEL区域(微软O FFICE技巧大赛获奖作品)18 35. 备份工件簿18 36. 自动打开工作簿18 37. 快速浏览长工作簿 19 38. 快速删除工作表中的空行19 39. 绘制斜线表头19 40. 绘制斜线单元格20 41. 每次选定同一单元格21 42. 快速查找工作簿21 43. 禁止复制隐藏行或列中的数据21 44. 制作个性单元格22 、数据输入和编辑技巧22 1. 在一个单元格内输入多个值22 2. 增加工作簿的页数 23 3. 奇特的F4键 23 4. 将格式化文本导入 E XCE123 5. 快速换行24 6. 巧变文本为数字24

office办公软件使用技巧大全

o f f i c e办公软件使用技巧 大全 -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

办公软件使用技巧 1.同时保存所有打开的Word文档 有时在同时编辑多个Word文档时,每个文件要逐一保存,既费时又费力,有没有简单的方法呢?在按下Shift键的同时,单击“文件”菜单,大家看,已经多出了“同时保存”和“同时关闭”命令,这可就方便多了 2.巧妙设置文档保护 在用Word 2000/XP打印一份文件时,忽然头儿有要事吩咐,要暂时离开一下,关闭文件吧,既费事又没必要,但又不想辛辛苦苦写的文件被别人破坏了。怎么办呢?执行“工具”菜单中的“保护文档”命令,在弹出的窗口中选择“保护窗体”,然后设上密码。怎么样,光标跑到了文件头,任你怎么移动鼠标、敲击键盘就是无法编辑了,不错吧。等回来时,执行“工具”菜单中的“解除文档保护”命令,一切又正常了。 3.编辑长文件更轻松 相信大家都有这样的经历:在使用Excel、Word编辑长文档时,有时需要将文章开始的多处内容复制到文章末尾。但通过拖动滚动条来回移动非常麻烦,还会出错。其实只要将鼠标移动到滚动条上面的适当位置,发现鼠标指针变成双箭头,此时按住鼠

标左键向下拖动,文档编辑区会被一分为二。你只需在上面编辑区找到文章开头的内容,在下面编辑区找到需要粘贴的位置,这样你就可以复制内容了,而不必来回切换。这种方法特别适合复制相距很远且处数较多的内容。 4.给WPS文档添加水印 先用作图软件(画笔工具等)制作一张色彩非常淡的图片(直接将Word的水印效果图“抓”下来也行),然后打开需要添加水印的WPS文档,执行“格式→页面背景→设置”命令,打开“设置背景”对话框,切换到“图片”标签下,按“选择图片”按钮,选中刚才制作的图片,并进行适当设置后确定,就可以为文档设置上水印了。 5.在金山文字中快速打开“页面设置” 在用金山文字2002处理文档时,一个最常用的操作就是设置页面。先执行“视图→标尺→水平(垂直)标尺”命令,展开“水平(垂直)标尺”打开,然后用鼠标在水平(垂直)标尺上双击,即可快速打开“页面设置”对话框,对页面进行设置了。 6.在Excel中插入拼音 在我们使用Excel时,常常会遇到十分孤僻的字,但加上拼音注释就能使人看得更明白。具体的方法是:选中想要加入拼音注

office使用技巧窍门全套汇编

office使用技巧全集 1.对Excel中的数据四舍五入 在Excel中的“四舍五入”函数—ROUND函数,它可以返回某个数值按指定位数四舍五入后的数值。只要在Excel提供的“数学与三角函数”中找到这个名为ROUND(number,num_digits)的函数。这个函数有两个参数,分别是number和num_digits。其中number 就是将要进行四舍五入的数值(或用公式计算的结果);num_digits 则是希望得到的数值的小数点后的位数。 2.让Word也能编辑WPS文件 目前,在中国大陆使用得最广泛的办公软件当数Word和WPS 了。然而这为资源的共享带来了一定的问题。如果想用Wordz编辑WPS文档,你得首先安装WPS文件转换器安装程序。该安装程序可在https://www.wendangku.net/doc/3918882228.html,/softwareview.asp?softwareid=13925下载。双击安装该转换器,就可以使Word打开WPS文件格式。在Word97/2000中测试成功。 3.鼠标点击选文的秘密 Word文档中将鼠标挪至屏幕左侧空白处,鼠标会由“I”形变为一个向右的斜箭头,单击,可选择一行;双击,可选择一段;三击,可全选。三击鼠标,对大多数人来说,还比较陌生,但很方便,你不妨一试。当然,全选有很多种方法,你可以按住鼠标左键拖曳至所需之处。你还可以用“Ctrl+A”,你也可以点击“编辑”菜单,选择“全选”。如果鼠标在段落中,双击,可选择一个词;三击,可选择这一段。

4.高效跨页选取段落 许多人翻页会采取拖曳的方式,因不容易控制,往往很难做到准确。其实界面的最下面一行,有几个按钮,“录制”、“修订”、“扩展”、“改写”,平时总是灰色的,要应用它,必须双击使之变黑。要跨页选取段落,先单击你要选取的起始点,再将“扩展”激活,然后翻页找到你需要的终点,单击,这中间一大块就以反白的形式选择好了。如果想追加选择,不断地点击下去就是了,不必从头再来。还有一种更为简单的方法:单击要选取的段落的起点,翻页找到终点,按住Shift键再单击鼠标,即可以准确地选中你所需的部分。 5.Word计量单位“磅”变“厘米” 平时我们大家在办公用Word的时候,是不是发现表格属性全都是以“磅”为单位的。这根本不符合中国的习惯和标准要求。要修改它先是点击“工具”菜单,然后选择“选项”栏,在弹出的对话框中点击“常规”选项,将计量单位改为“厘米”即可。 6.Excel中同时设置多个工作表单 使用Excel进行表单及数据的处理,常遇有许多工作表需要同时改变相同属性的情况。我们将鼠标置于工作表的切换窗口,点击右键,在弹出菜单项中选择“选定全部工作表”,其间所作设置会在“工作组”中令所有工作表生效。如果你所处理的表格为相同的格式,也可同时添加或删除相同的行和列,表格中对应的行或列的数值、内容也可进行设定,甚至对相同单元格中应用函数(公式)也能全部进行更改和替换。 7.保持文档中图表的完整

office使用技巧全集

1.对Excel中的数据四舍五入 在Excel中的“四舍五入”函数—ROUND函数,它可以返回某个数值按指定位数四舍五入后的数值。只要在Excel提供的“数学与三角函数”中找到这个名为ROUND(number,num_digits)的函数。这个函数有两个参数,分别是number和num_digits。其中number 就是将要进行四舍五入的数值(或用公式计算的结果);num_digits 则是希望得到的数值的小数点后的位数。 2.让Word也能编辑WPS文件 目前,在中国大陆使用得最广泛的办公软件当数Word和WPS 了。然而这为资源的共享带来了一定的问题。如果想用Wordz编辑WPS文档,你得首先安装WPS文件转换器安装程序。该安装程序可在https://www.wendangku.net/doc/3918882228.html,/softwareview.asp?softwareid=13925下载。双击安装该转换器,就可以使Word打开WPS文件格式。在Word97/2000中测试成功。 3.鼠标点击选文的秘密 Word文档中将鼠标挪至屏幕左侧空白处,鼠标会由“I”形变为一个向右的斜箭头,单击,可选择一行;双击,可选择一段;三击,可全选。三击鼠标,对大多数人来说,还比较陌生,但很方便,你不妨一试。当然,全选有很多种方法,你可以按住鼠标左键拖曳至所需之处。你还可以用“Ctrl+A”,你也可以点击“编辑”菜单,选择“全选”。如果鼠标在段落中,双击,可选择一个词;三击,

许多人翻页会采取拖曳的方式,因不容易控制,往往很难做到准确。其实界面的最下面一行,有几个按钮,“录制”、“修订”、“扩展”、“改写”,平时总是灰色的,要应用它,必须双击使之变黑。要跨页选取段落,先单击你要选取的起始点,再将“扩展”激活,然后翻页找到你需要的终点,单击,这中间一大块就以反白的形式选择好了。如果想追加选择,不断地点击下去就是了,不必从头再来。还有一种更为简单的方法:单击要选取的段落的起点,翻页找到终点,按住Shift键再单击鼠标,即可以准确地选中你所需的部分。 5.Word计量单位“磅”变“厘米” 平时我们大家在办公用Word的时候,是不是发现表格属性全都是以“磅”为单位的。这根本不符合中国的习惯和标准要求。要修改它先是点击“工具”菜单,然后选择“选项”栏,在弹出的对话框中点击“常规”选项,将计量单位改为“厘米”即可。 6.Excel中同时设置多个工作表单 使用Excel进行表单及数据的处理,常遇有许多工作表需要同时改变相同属性的情况。我们将鼠标置于工作表的切换窗口,点击右键,在弹出菜单项中选择“选定全部工作表”,其间所作设置会在“工作组”中令所有工作表生效。如果你所处理的表格为相同的格式,也可同时添加或删除相同的行和列,表格中对应的行或列的数值、内容也可进行设定,甚至对相同单元格中应用函数(公式)也

office办公软件使用技巧大全

办公软件使用技巧 1. 同时保存所有打开的Word文档 有时在同时编辑多个Word文档时,每个文件要逐一保存,既费时又费力,有没有简单的法呢?在按下Shift键的同时,单击“文件”菜单,大家看,已经多出了“同时保存”和“同时关闭”命令,这可就便多了 2. 巧妙设置文档保护 在用Word 2000/XP 打印一份文件时,忽然头儿有要事吩咐,要暂时离开一下,关闭文件吧,既费事又没必要,但又不想辛辛苦苦写的文件被别人破坏了。怎么办呢?执行“工具”菜单中的“保护文档”命令,在弹出的窗口中选择“保护窗体”,然后设上密码。怎么样,光标跑到了文件头,任你怎么移动鼠标、敲击键盘就是无法编辑了,不错吧。等回来时,执行“工具”菜单中的“解除文档保护”命令,一切又正常了。 3. 编辑长文件更轻松 相信大家都有这样的经历:在使用Excel、Word编辑长文档时,有时需要将文章开始的多处容复制到文章末尾。但通过拖动滚动条来回移动非常麻烦,还会出错。其实只要将鼠标移动到滚动条上面的适当位置,发现鼠标指针变成双箭头,此时按住鼠标左键向下拖动,文档编辑区会被一分为二。你只需在上面编辑区找到文章开头的容,在下面编辑区找到需要粘贴的位置,这样你就可以复制容了,而不必来回切换。这种法特别适合复制相距很远且处数较多的容。 4. 给WPS文档添加水印 先用作图软件(画笔工具等)制作一色彩非常淡的图片(直接将Word的水印效果图“抓”下来也行),然后打开需要添加水印的WPS文档,执行“格式- 页面背景-设置”命令,打开“设置背景”对话框,切换到“图片”标签下,

按“选择图片”按钮,选中刚才制作的图片,并进行适当设置后确定,就可以为文档设置上水印了。 5. 在金山文字中快速打开“页面设置” 在用金山文字2002处理文档时,一个最常用的操作就是设置页面。先执行“视图-标尺-水平(垂直)标尺”命令,展开“水平(垂直)标尺”打开,然后用鼠标在水平(垂直)标尺上双击,即可快速打开“页面设置”对话框,对页面进行设置了。 6. 在Excel中插入拼音 在我们使用Excel时,常常会遇到十分孤僻的字,但加上拼音注释就能使人看得更明白。具体的法是:选中想要加入拼音注释的表格,打开Excel的菜单栏中的“格式”菜单,选中“拼音信息/设置”项,在弹出的对话框中的“设置” 和“字体”选项中,分别选择拼音的对齐式和字体,最后选择“拼音信息”子菜单中的“编缉”,即可以在单元格中输入拼音了。要查看拼音,可通过“拼音信息”子菜单中的“显示和隐藏”项显示注释的拼音。 7. 取消“自作聪明”的超级 当我们在Word文件中键入网址或信箱的时候,Word会自动为我们转换为超级,如果不小心在网址上按一下,就会启动IE进入超级。但如果我们不需 要这样的功能,就会觉得有些碍手碍脚了。如取消这种功能呢?在Word中单 击“工具-自动更正选项”,单击“键入时自动套用格式”选项,将“ In ternet 及网络路径替换为超级”项目前的小钩取消。再单击“自动套用格式”选项,将“In ter net及网络路径替换为超级”项目前的小钩取消。再单击“确定”。这样,以后再输入网址后,就不会转变为超级了。 8. 巧设Word启动后的默认文件夹

Office 产品应用场景与技巧

Office 2007产品应用场景与技巧 Microsoft Office Word 2007使用技巧 Tips 1:更直观地比较文档内容 在进行文档的修订时,很难区分修订前的内容和修订后的内容,Office Word 2007 增强的“比较”文档功能,可以更加直观的浏览文档修订前、后的不同。 首先,单击功能区中的“审阅”标签,然后单击“比较”选项组中的“比较”按钮,并在其下拉菜单中执行“比较”命令,打开“比较文档”对话框。选择所要比较的“原文档”和“修订的文档”。 图1 选择比较的文档 稍后,即可看到修订的具体内容,同时,比较的文档、原文档和修订的文档也将出现在比较结果文档中。

图2 比较文档的结果 Tips 2:轻松解决语言障碍 在 Office Word 2007 中提供了强大的语言支持功能,可以更有效的帮助用户无障碍地阅读文档。比如:当我们遇到不熟悉的单词或短语时,可以在该文档内容上单击鼠标右键,执行“翻译”命令,打开相应的翻译屏幕提示。

图3 执行“翻译”命令 将鼠标移动的单词或短语的上方,就可以即时看到翻译的结果。

图4 将英文翻译成中文 提示:此功能也可以在 Excel 、PowerPoint 、 Outlook 等应用程序中使用。Microsoft Office Excel 2007使用技巧 Tips 1:自动添加表格字段标题 在进行表格数据的输入时,只要在表格右侧的空白单元格里输入数据,Excel 2007 将会为您新添加字段标题,并自动辨别和套用适当的名称与格式。 比如:在下图的工作表中已经填写了“七月”的数据,再在工作表右侧空白处继续输入北京地区的数据时,通过默认的自动填充或自定义列表的功能特性,Excel 2007 立即贴心并聪明地为您完成新字段“八月”的标题文字与格式设定。让您只需专注后续重要数据的输入,而不必花费任何心思在表格的格式设定与外观的操作上。

超全实用Office使用技巧方法大全

Excel使用技巧集锦163种技巧(多加练习,定有成功) 基本方法7 1. 快速选中全部工作表7 2. 快速启动E XCEL 7 3. 快速删除选定区域数据7 4. 给单元格重新命名7 5. 在E XCEL中选择整个单元格范围8 6. 快速移动/复制单元格8 7. 快速修改单元格式次序8 8. 彻底清除单元格内容8 9. 选择单元格8 10. 为工作表命名9 11. 一次性打开多个工作簿9 12. 快速切换工作簿9 10 13. 选定超级链接文本(微软O FFICE技巧大赛获奖作品) 14. 快速查找10 15. 修改默认文件保存路径10 16. 指定打开的文件夹10 17. 在多个E XCEL工作簿间快速切换10 18. 快速获取帮助11 19. 创建帮助文件的快捷方式11 20. 双击单元格某边移动选定单元格11 21. 双击单元格某边选取单元格区域11 22. 快速选定不连续单元格11 23. 根据条件选择单元格11 24. 复制或移动单元格12

26. 快速删除空行 12 27. 回车键的粘贴功能 12 28. 快速关闭多个文件 12 29. 选定多个工作表 13 30. 对多个工作表快速编辑 13 31. 移动和复制工作表 13 32. 工作表的删除 13 33. 快速选择单元格 13 34. 快速选定E XCEL 区域(微软 O FFICE 技巧大赛获奖作品) 35. 备份工件簿 14 36. 自动打开工作簿 14 37. 快速浏览长工作簿 14 38. 快速删除工作表中的空行 14 39. 绘制斜线表头 14 40. 绘制斜线单元格 15 41. 每次选定同一单元格 15 42. 快速查找工作簿 15 43. 禁止复制隐藏行或列中的数据 15 44. 制作个性单元格 16 、 数据输入和编辑技巧 16 1. 在一个单元格内输入多个值 16 2. 增加工作簿的页数 16 3. 奇特的F4键16 4. 将格式化文本导入 E XCEL 17 5. 快速换行 17 6. 巧变文本为数字 17 7. 在单元格中输入0值 17 8. 将数字设为文本格式 18 25. 完全删除E XCEL 中的单元格12 13

相关文档
相关文档 最新文档