资源描述
Excel表格的基本操作2优质资料
(可以直接使用,可编辑 优质资料,欢迎下载)
【基本操作】Excel表格的基本操作(精选35个技巧)
目录
技巧1、单元格内强制换行技巧2、锁定标题行技巧3、打印标题行技巧4、查找重复值技巧5、删除重复值技巧6、快速输入对号√技巧7、万元显示技巧8、隐藏0值技巧9、隐藏单元格所有值。技巧10、单元格中输入00001技巧11、按月填充日期技巧12、合并多个单元格内容技巧13、防止重复录入技巧14、公式转数值技巧15、小数变整数技巧16、快速插入多行技巧17、两列互换技巧18、批量设置求和公式技巧19、同时查看一个excel文件的两个工作表。技巧20:同时修改多个工作表技巧21:恢复未保存文件技巧22、给excel文件添加打开密码技巧23、快速关闭所有excel文件技巧24、制作下拉菜单技巧25、二级联动下拉技巧26、删除空白行技巧27、表格只能填写不能修改技巧28、文字跨列居中显示技巧29、批注添加图片技巧30、批量隐藏和显示批注技巧31、解决数字不能求和技巧32、隔行插入空行技巧33、快速调整最适合列宽技巧34、快速复制公式技巧35、合并单元格筛选
技巧1、单元格内强制换行
在单元格中某个字符后按alt+回车键,即可强制把光标换到下一行中。
技巧2、锁定标题行
选取第2行,视图 - 冻结窗格 - 冻结首行(或选取第2行 - 冻结窗格)冻结后再向下翻看时标题行始终显示在最上面。
技巧3、打印标题行
如果想在打印时每一页都显示标题,页面布局 - 打印标题 - 首端标题行:选取要显示的行
技巧4、查找重复值
选取数据区域 - 开始 - 条件格式 - 突出显示单元格规则 - 重复值。
显示效果:
技巧5、删除重复值
选取含重复值的单元格区域,数据 - 删除重复值。
技巧6、快速输入对号√
在excel中输入符号最快的方式就是利用 alt+数字的方式,比如输入√,你可以:
按alt不松,然后按小键盘的数字键: 41420
技巧7、万元显示
在一个空单元格输入10000(建议设置数字格式和边框) - 复制它 - 选择性粘贴 - 运算:除
转换后
技巧8、隐藏0值
表格中的0值如果不想显示,可以通过:文件 - excel选项 - 高级 - 在具有零值的单元格
技巧9、隐藏单元格所有值。
如果要隐藏单元格的值,选取该区域,右键 - 设置单元格格式 - 数字 - 自定义 - 右侧文本框中输入三个分号 ;;;
技巧10、单元格中输入00001
如果在单元格中输入以0开头的数字,可以输入前把格式设置成文本格式,如果想固定位数(如5位)不足用0补齐,可以:
选取该区域,右键 - 设置单元格格式 - 数字 - 自定义 - 右侧文本框中输入 00000
输入1即可显示00001
技巧11、按月填充日期
日期所在单元格向下拖动复制后,打开粘贴列表,选取“以月填充”
技巧12、合并多个单元格内容
把列宽调整成能容易合并后字符,然后选取合并的区域 - 开始 - 填充 - 两端对齐
合并后:
技巧13、防止重复录入
选取要防止重复录入的单元格区域,数据 - 有效性 - 自定义 - 公式:
如果重复录入,会提示错误并清除录入内容
技巧14、公式转数值
选取公式所在区域,复制 - 粘贴 - 粘贴为数值
技巧15、小数变整数
选取数字区域,ctrl+h打开替换窗口,查找 .* ,替换留空然后点全部替换即可。
技巧16、快速插入多行
当你选取行并把光标放在右下角,按下shift键时,你会发现光标会变成如下图所示形状。
这时你可以向拖拉
你会发现你拖多少行,就会插入多少个空行。这种插入方法比选取一定数量的行再插入更加灵活。
技巧17、两列互换
在下面的表中,选取C列,光标放在边线处,按shift同时按下鼠标左键不松,拖动到B列前面,当B列前出现虚线时,松开鼠标左键即完成互换。
放在边线
按左键不松拖动到B列前
完成
技巧18、批量设置求和公式
选取包括黄色行列的区域,按alt 和 = (按alt键不松再按等号)即可完成求和公式的输入。
技巧19、同时查看一个excel文件的两个工作表
视图 - 新建窗口
设置重排窗口
排列方式
重排后效果
技巧20:同时修改多个工作表
按shift或ctrl键选取多个工作表,然后在一个表中输入内容或修改格式,所有选中的表都会同步输入或修改。这样就不必逐个表修改了。
技巧21:恢复未保存文件
打开路径:C:\Users\Administrator\AppData\Roaming\Microsoft\Excel\ ,在文件夹内会找到的未保存文件所在的文件夹,如下图所示。
打开文件夹,未保存的文件就找到了。打开后另存就OK!
为什么我测试没有恢复成功?你是怎么知道恢复文件的路径的?
先看一个界面,看过你就明白了。
文件 - excel选项 - 保存
技巧22、给excel文件添加打开密码
excel文件 - 信息 - 保护工作簿 - 用密码进行加密。
技巧23、快速关闭所有excel文件
按shift键不松,再点右上角关闭按钮,可以关闭所有打开的excel文件。
技巧24、制作下拉菜单
例:如下图所示,要求在销售员一列设置可以选取的下拉菜单。
分析:在excel里制作下拉菜单有好几种方法,我们这里是介绍用数据有效性设置下拉菜单,
设置步骤:
步骤1:选取销售员一列需要设置下拉菜单的单元格区域(这一步不能少),打开数据有效性窗口(excel2003版数据菜单 - 有效性,excel2007和2021版本数据选项卡 - 数据有效性 - 数据有效性),在窗口中的“设置”选项卡里选“序列”。
步骤2:在来源输入框里我们需要设置下拉菜单里要显示的内容,有两种设置方法。
1 直接输入法。在来源后的框里输入用“,”(英文逗号)连接的字符串:张一,吴汉青,刘能,将文胜,李大民
2 引用单元格的内容法。如果销售员在单元格B4:B8区域里,在“来源”后输入或点框最后的折叠按钮选这个区域。如下图所示。
进行如上设置后,我们就可以在销售员一列看到下拉菜单了。
技巧25、二级联动下拉
例:如下图所示,在 列输入或选取苹果,型号下拉里会显示所有苹果 的所有型号,如果 列输入三星,在型号列下拉菜单显示所有三星的型号。
列选苹果:
列选取三星
同学们应该明白什么是二级下拉联动菜单了,还等什么,我们一起开始制作吧。
操作步骤:
步骤1:设置数据源区域。就是把 名称和型号整理成如下图格式备用,存放的位置随意。
步骤2:批量定义名称。选取 名称和型号区域后,打开指定名称窗口(excel2003版里,插入菜单 - 名称 - 指定,07和10版公式选项卡 - 定义的名称组 - 根据所选内容创建),选取窗口上的“首行”复选框。如下图所示。
步骤3:设置数据有效性。选取型号列,打开数据有效性窗口(打开方法见昨天的教程),在来源中输入=indirect(D5)
进行如下设置后,二级联动菜单设置完成。
技巧26、删除空白行
选取A列区域 - ctrl+g打开定位窗口 - 空值 - 删除整行
技巧27、表格只能填写不能修改
操作步骤
步骤1:按ctrl键,选取所有黄色的区域,然后按ctrl+1(数字1)打开“单元格格式”窗口,在锁定选项卡中,去掉“锁定”前面的勾选。
步骤2:保护工作表。excel2003版工具菜单 - 保护 - 保护工作表。excel2021版审阅选项卡 - 保护工作表。
按上述步骤操作后,你试着修改黄色区域单元格:ok。你试着在黄色之外的区域修改或插入行/列,就会弹出如下图所示的提示。
技巧28、文字跨列居中显示
如果你不想合并单元格,又想让文字跨列显示。可以选取多列 - 右键设置单元格格式 - 对齐 - 水平对齐 - 跨列居中。
显示后效果
技巧29、批注添加图片
在制作产品介绍表或员工信息表时,常需要添加产品图片和员工照片,这时用批注插入图片是最好的选择。
选取批注 - 右键“设置批注格式” - 颜色 - 填充效果 - 图片 -选择图片
选择图片窗口
设置完成效果:
技巧30、批量隐藏和显示批注
打开审阅选项卡,点击“显示所有批注”
技巧31、解决数字不能求和
数据导入Excel中后居然是以文本形式存在的(数字默认是右对齐,而文本是左对齐的),即使是重新设置单元格格式为数字也无济于事。
下面的方法可以帮你快速转换成可以计算的数字
选取数字区域,第一个单元格一定是包括数字的,而且单元格左上方有绿三角,选取后打开绿三角,点转换为数字。如下图所示
技巧32、隔行插入空行
隔行插入是一个古老但又不断有人提问的话题,网上已有很多相关的教程,今天兰色录了一段动画,演示隔行插入的步骤。
下面的演示分为两部分:
1 隔行插入空行
2 分类前插入空行
注:演示过程中打开定位窗口的组合键是 ctrl + g
技巧33、快速调整最适合列宽
选取多行或多行,双击其中一列的边线,你会发现所有行或列调整为最适合的列宽/行高。
技巧34、快速复制公式
双击单元格右下角,你会发现公式已复制到表格的最后面。
技巧35、合并单元格筛选
含合并单元格表格
如果直接筛选会出现下面的情况。(只筛选出第一条)
如果想实现正确的筛选结果,需要对表格A列动一下手术。
第一步:复制A列到E列。
第二步:取消A列合并
第三步:选取A列,CTRL+G定位 - 空值,在编辑栏中输入=A2,再按CTRL+Enter完成填充
第四步:复制A列,粘贴成数值(公式转换成数值)
第五步:用格式刷把E列的格式刷到A列,恢复A列的合并格式。
“手术”完成后,就可以正常筛选了,如下图所示。
实验二线性表的基本操作
一、实验目的
1.掌握用C++/C语言调试程序的基本方法。
2.掌握线性表的顺序存储和链式存储的基本运算,如插入、删除等。
二、实验要求
1.C++/C完成算法设计和程序设计并上机调试通过。
2.撰写实验报告,提供实验结果和数据。
3. 分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。
三、实验内容:
1.分析并运行以下各子程序的主要功能。
程序1:顺序存储的线性表和运算
#include<stdio.h>
#define MAXSIZE 100
int list[MAXSIZE];
int n;
/*insert in a seqlist*/
int sq_insert(int list[], int *p_n, int i, int x)
{int j;
if (i<0 || i>*p_n) return(1);
if (*p_n==MAXSIZE) return(2);
for (j=*p_n+1; j>i; j--)
list[j]=list[j-1];
list[i]=x;
(*p_n)++;
return(0);
}
/*delete in a seq list*/
int sq_delete(int list[], int *p_n, int i)
{int j;
if (i<0 || i>=*p_n) return(1);
for (j = i+1; j<=*p_n; j++)
list[j-1] = list[j];
(*p_n)--;
return(0);
}
void main()
{int i,x,temp;
printf("please input the number for n\n");
printf("n=");
scanf("%d",&n);
for (i=0; i<=n; i++)
{printf("list[%d]=",i);
scanf("%d",&list[i]);}
printf("The list before insertion is\n");
for (i=0; i<=n; i++) printf("%d ",list[i]);
printf("\n");
printf("please input the position where you want to insert a value\nposition=");
scanf("%d",&i);
printf("please input the value you want to insert.\nx=");
scanf("%d",&x);
temp=sq_insert(list,&n,i,x);
switch(temp)
{case 0:printf("The insertion is successful!\n");
printf("The list is after insertion is\n");
for(i=0; i<=n; i++) printf("%d ",list[i]);
printf("\n");
printf("%d\n",n);
break;
case 1:
case 2:printf("The insertion is not successful!\n");break;}
/*deleting*/
printf("The list before deleting is\n");
for (i=0; i<=n; i++) printf("%d ",list[i]);
printf("\n");
printf("please input the position where you want to delete a value\nposition=");
scanf("%d",&i);
temp=sq_delete(list,&n,i);
switch(temp)
{case 0:printf("The deleting is successful!\n");
printf("The list is after deleting is\n");
for(i=0; i<=n; i++) printf("%d ",list[i]);
printf("\n");
printf("%d",n);
break;
case 1:printf("The deleting is not successful!");break;}
}
2.分析并运行以下各子程序的主要功能。
程序2链式存储的线性表和运算
#include<stdio.h>
#include<malloc.h>
struct node{
char data;
struct node *next;
};
typedef struct node NODE;
/*This function creates a link_list with N nodes.*/
NODE *create_link_list(int n)
{int i;
NODE *head, *p, *q;
if (n==0) return NULL;
head = (NODE *) malloc(sizeof(NODE));
p = head;
printf("Please input %d chars for the link list\n",n);
for (i=0; i<n; i++)
{scanf("%c ", &(p->data));
q=(NODE *)malloc(sizeof(NODE));
printf("test3\n");
p->next=q;
p=q;}
scanf("%c ",&(p->data));
getchar();
p->next=NULL;
return (head);}
/*This function inserts a node whose value is b*/
/*before the node whose value is a, if the node is not exist,*/
/*then insert it at the end of the list*/
void insert(NODE **p_head, char a, char b)
{NODE *p, *q;
q = (NODE *)malloc(sizeof(NODE));
q->data = b;
q->next =NULL;
if (* p_head == NULL) * p_head = q;
else
{p=(NODE*)malloc(sizeof(NODE));
p = * p_head;
while (p->data != a && p->next != NULL)
p = p->next;
q->next = p->next;
p->next = q;}
}
/*The function deletes the node whose value is a,*/
/*if success, return 0, or return 1*/
int deletenode(NODE **p_head, char a)
{NODE *p, *q;
q=*p_head;
if (q==NULL) return(1);
if (q->data == a)
{* p_head = q->next;
free(q);
return (0);}
else
{while (q->data != a && q->next != NULL)
{p = q;
q = q->next;}
if (q->data == a)
{p->next = q->next;
free(q);
return(0);}
else return(1);}
}
void main()
{ NODE *my_head,*p;
/* create a link list with m nodes */
int m;
char ch_a,ch_b;
printf("please input the number of nodes for the link_list\nm=");
scanf("%d",&m);
getchar();
printf("test1\n");
my_head = (NODE *) malloc(sizeof(NODE));
my_head=create_link_list(m);
/*Output the link list*/
printf("The link list is like:\n");
p=my_head;
while (p != NULL)
{printf("%c ",p->data);
p=p->next;
}
printf("\n");
/*insert a node whose value is b before a*/
printf("Please input the position for a\n ch_a=");
getchar();
scanf("%c",&ch_a);
getchar();
printf("Please input the value that you want to insert\n ch_b=");
scanf("%c",&ch_b);
getchar();
insert(&my_head,ch_a,ch_b);
printf("The link list after insertion is like:\n");
p=my_head;
while (p != NULL)
{printf("%c ",p->data);
p=p->next;
}
printf("\n");
/*delete a node whose value is a*/
printf("Please input the position for a a=");
scanf("%c",&ch_a);
getchar();
deletenode(&my_head,ch_a);
printf("The link list after deleting is like:\n");
p=my_head;
while (p != NULL)
{printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
3.运行以下程序并分析各子函数的主要功能。
#include <stdio.h>
#include <stdlib.h>
struct tagNode
{
int data;
struct tagNode *pNext;
};
typedef struct tagNode* pNode;
//将结点插入到链表的适当位置,这是一个降序排列的链表
//
void insertList(pNode head,//链表头结点
pNode pnode)//要插入的结点
{
pNode pPri=head;
while (pPri->pNext!=NULL)
{
if (pPri->pNext->data<pnode->data)
{
pnode->pNext=pPri->pNext;
pPri->pNext=pnode;
break;
}
pPri=pPri->pNext;
}
if (pPri->pNext==NULL)//如果要插入的结点最小
{
pPri->pNext=pnode;
}
}
//输出链表
void printLinkedList(pNode head)
{
pNode temp=head->pNext;
while (temp!=NULL)
{
printf("%d ",temp->data);
temp=temp->pNext;
}
}
//从链表中删除结点
void delformList(pNode head,int data)
{
pNode temp=head->pNext;
pNode pPri=head;
while (temp!=NULL)
{
if (temp->data==data)
{
pPri->pNext=temp->pNext;
free(temp);
break;
}
pPri=temp;
temp=temp->pNext;
}
}
void main()
{
pNode head=(pNode)malloc(sizeof(struct tagNode));//给头指针分配空间
pNode pTemp=NULL;
int temp;
head->pNext=NULL;//比较好的习惯就是分配好空间,马上赋值
printf("请输入要放入链表中的数据,以-1结尾:");
//读入数据,以-1结尾,把数据插入链表中
scanf("%d",&temp);
while (temp!=-1)
{
pTemp=(pNode)malloc(sizeof(struct tagNode));
pTemp->data=temp;
pTemp->pNext=NULL;
insertList(head,pTemp);
scanf("%d",&temp);
}
printf("降序排列的链表为:\n");
printLinkedList(head);
printf("\n");
//下面的代码当删除函数编写成功后,可以取消注释,让其执行,主要是调用函数实现链表结点的删除
//printf("请输入要删除数,以-1结尾:");
//scanf("%d",&temp);
//while (temp!=-1)
//{
// delformList(head,temp);
// scanf("%d",&temp);
//}
//printf("删除节点后,链表中剩余数据为:");
//printLinkedList(head);
//printf("\n");
}
四、思考与提高
试将以上链表改为有序表,并分析有序表有哪些显著的优点和缺点?
库函数载和常量定义:(代码,C++)
#include<iostream>
using namespace std;
const int MaxSize=100;
(1)顺序表存储结构的定义(类的声明):(代码)
template <class datatype> //定义模板类SeqList
class SeqList
{
public:
SeqList( ); //无参构造函数
SeqList(datatype a[ ], int n); //有参构造函数
~SeqList(){}; //析构函数为空
int Length(); //求线性表的长度
datatype Get(int i); //按位查找,取线性表的第i个元素
int Locate(datatype item); //查找元素item
void Insert(int i, datatype item); //在第i个位置插入元素item
datatype Delete(int i); //删除线性表的第i个元素
void display(); //遍历线性表,按序号依次输出各元素
private:
datatype data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
(2)初始化顺序表算法实现(不带参数的构造函数)
/*
*输入:无
*前置条件:顺序表不存在
*功能:构建一个顺序表
*输出:无
*后置条件:表长为0
*/
实现代码:
template <class datatype>
SeqList<datatype>:: SeqList( )
{
length=0;
}
(3)顺序表的建立算法(带参数的构造函数)
/*
*输入:顺序表信息的数组形式a[],顺序表长度n
*前置条件:顺序表不存在
*功能:将数组a[]中元素建为长度为n的顺序表
*输出:无
*后置条件:构建一个顺序表
*/
实现代码:
template <class datatype>
SeqList<datatype>:: SeqList(datatype a[], int n)
{
if (n>MaxSize)
{
cout<<"数组元素个数不合法"<<endl;
}
for (int i=0; i<n; i++)
data[i]=a[i];
length=n;
}(4)在顺序表的第i个位置前插入元素e算法
/*
*输入:插入元素e,插入位置i
*前置条件:顺序表存在,i要合法
*功能:将元素e插入到顺序表中位置i处
*输出:无
*后置条件:顺序表插入新元素,表长加1
*/
实现代码:
template <class datatype>
void SeqList<datatype>::Insert(int i, datatype item)
{
int j;
if (length>=MaxSize)
{
cout<<"溢出"<<endl;
}
if (i<1 || i>length+1)
{
cout<<"i不合法!"<<endl;
}
for (j=length; j>=i; j--)
data[j]=data[j-1];
data[i-1]=item;
length++;
}(5)删除线性表中第i个元素算法
/*
*输入:要删除元素位置i
*前置条件:顺序表存在,i要合法
*功能:删除顺序表中位置为i的元素
*输出:无
*后置条件:顺序表册除了一个元素,表长减1
*/
实现代码:
template <class datatype>
datatype SeqList<datatype>::Delete(int i)
{
int item,j;
if (length==0)
{
cout<<"表为空,无法删除元素!"<<endl;
}
if (i<1 || i>length)
{
cout<<"i不合法!"<<endl;
}
item=data[i-1];//获得要删除的元素值
for (j=i; j<length; j++)
data[j-1]=data[j]; //注意数组下标从0记
length--;
return item;
}(6)遍历线性表元素算法
/*
*输入:无
*前置条件:顺序表存在
*功能:顺序表遍历
*输出:输出所有元素
*后置条件:无
*/
实现代码:
template<class datatype>
void SeqList<datatype>::display()
{
if(length==0)
{
cout<<"表为空,无法输出!"<<endl;
}
for(int i=0;i<length;i++)
{
cout<<data[i]<<"";
}
}
(7)获得线性表长度算法
/*
*输入:无
*前置条件:顺序表存在
*功能:输出顺序表长度
*输出:顺序表长度
*后置条件:无
*/
实现代码:
template <class datatype>
int SeqList<datatype>::Length()
{
return Length;
}
(8)在顺序线性表中查找e值,返回该元素的位序算法
/*
*输入:查询元素值e
*前置条件:顺序表存在
*功能:按值查找值的元素并输出位置
*输出:查询元素的位置
*后置条件:无
*/
实现代码:
template <class datatype>
int SeqList<datatype>::Locate(datatype item)
{
for (int i=0; i<length; i++)
if (data[i]==item)
return i+1 ;
//下标为i的元素等于item,返回其序号i+1
return 0; //查找失败
}
(9)获得顺序线性表第i个元素的值
/*
*输入:查询元素位置i
*前置条件:顺序表存在,i要合法
*功能:按位查找位置为i的元素并输出值
*输出:查询元素的值
*后置条件:无
*/
实现代码:
template <class datatype>
datatype SeqList<datatype>::Get(int i)
{
if (i<0||i>length)
{
cout<<"i不合法!"<<endl;
}
else return data[i-1];
}
(10)判表空算法
/*
*输入:无
*前置条件:无
*功能:判表是否为空
*输出:为空返回1,不为空返回0
*后置条件:无
*/
实现代码:
template <class datatype>
bool SeqList<datatype>::Empty()
{
if (length==0)
{
return 1;
}
else
{
return 0;
}
}
(11)求直接前驱结点算法
/*
*输入:要查找的元素e,待存放前驱结点值e1
*前置条件:无
*功能:查找该元素的所在位置,获得其前驱所在位置。
*输出:返回其前驱结点的位序。
*后置条件:e1值为前驱结点的值
*/
实现代码:
template<class datatype>
int SeqList<datatype>::Pre(datatype item)
{
int k=Locate(item)-1;
if (k>0)
return k;
else
{
cout<<"无前驱结点!"<<endl;
return 0;
}
}
(12)求直接后继结点算法
/*
*输入:要查找的元素e,待存放后继结点值e1
*前置条件:无
*功能:查找该元素的所在位置,获得其后继所在位置。
*输出:返回其后继结点的位序。
*后置条件:e1值为后继结点的值
*/
实现代码:
template<class datatype>
int SeqList<datatype>::Suc(datatype item)
{
int k=Locate(item)+1;
if (k>length)
{
cout<<"无后继结点!"<<endl;
return 0;
}
else
{
return k;
}
}
上机实现以上基本操作,写出main()程序:
用以上基本操作算法,实现A=AUB算法。(利用函数模板实现)
/*
*输入:集合A,集合B
*前置条件:无
*功能:实现A=AUB
*输出:无
*后置条件:A中添加了B中的元素。
*/
展开阅读全文