Excel中vlookup的灵活用法

使用vlookup函数整理数据时,由于索引的值必须为返回值范围的第一列,所以导致每次都要把返回值粘到索引值的后面才能用vlookup,
但如果我们在vlookup的第二参数上,也就是table_array参数上动动手脚,就可以实现返回索引前面的数值,甚至跨表返回值。

如图
vlookup+if

choose的作用是根据索引返回值,choose里面的第一个参数用的是大括号,也就是数组,所以choose会返回数组内的每一个索引对应的值。
choose第二个参数开始为备选值,所以我们就可以按照vlookup要求的顺序把字段罗列到choose函数里面,返回给vlookup。

这样就实现不需要调整列的顺序来通过vlookup返回值,甚至可以拼接不同sheet或者不同文件中的字段返回给vlookup

修复错误事物处理

检查
select * from mtl_material_transactions where organization_id =109 and costed_flag = 'E'

修复
1.
update mtl_material_transactions
set costed_flag = NULL,
request_id = 0,
program_application_id = 0,
program_id = 0,
program_update_date = null,
error_code = null,
error_explanation = null,
transaction_group_id = null
where organization_id =
and costed_flag = 'E'

2.停’成本管理器’,然后重新启动.
3.回答:成本管理器能否成功运行至完成?
4.如果可以,则证明你原来备份的TRANSACTIONS数据有问题,需要清理一下,再重新走一次.
5.如果不可以,则证明你的管理器有问题.

!!别滥用

sed 详解

1. Sed简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。
2. 定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。

3. Sed命令
调用sed命令有两种形式:
*
sed [options] 'command' file(s)
*
sed [options] -f scriptfile file(s)
a\
在当前行后面加入一行文本。
b lable
分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
c\
用新的文本改变本行的文本。
d
从模板块(Pattern space)位置删除行。
D
删除模板块的第一行。
i\
在当前行上面插入文本。
h
拷贝模板块的内容到内存中的缓冲区。
H
追加模板块的内容到内存中的缓冲区
g
获得内存缓冲区的内容,并替代当前模板块中的文本。
G
获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l
列表不能打印字符的清单。
n
读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N
追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p
打印模板块的行。
P(大写)
打印模板块的第一行。
q
退出Sed。
r file
从file中读行。
t label
if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label
错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file
写并追加模板块到file末尾。
W file
写并追加模板块的第一行到file末尾。
!
表示后面的命令对所有没有被选定的行发生作用。
s/re/string
用string替换正则表达式re。
=
打印当前行号码。
#
把注释扩展到下一个换行符以前。
以下的是替换标记
*
g表示行内全面替换。
*
p表示打印行。
*
w表示把行写入一个文件。
*
x表示互换模板块中的文本和缓冲区中的文本。
*
y表示把一个字符翻译为另外的字符(但是不用于正则表达式)

4. 选项
-e command, --expression=command
允许多台编辑。
-h, --help
打印帮助,并显示bug列表的地址。
-n, --quiet, --silent

取消默认输出。
-f, --filer=script-file
引导sed脚本文件名。
-V, --version
打印版本和版权信息。

5. 元字符集^
锚定行的开始 如:/^sed/匹配所有以sed开头的行。
$
锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
.
匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
*
匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]
匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]
匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\)
保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
&
保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 锚定单词的开始,如:/\
锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\}
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
x\{m,\}
重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\}
重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
6. 实例
删除:d命令
*
$ sed '2d' example-----删除example文件的第二行。
*
$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。
*
$ sed '$d' example-----删除example文件的最后一行。
*
$ sed '/test/'d example-----删除example文件所有包含test的行。
替换:s命令
*
$ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
*
$ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
*
$ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
*
$ sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
*
$ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。
选定行的范围:逗号
*
$ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。
*
$ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。
*
$ sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。
多点编辑:e命令
*
$ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
*
$ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。
从文件读入:r命令
*
$ sed '/test/r file' example-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
写入文件:w命令
*
$ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。
追加命令:a命令
*
$ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。 插入:i命令 $ sed '/test/i\\ new line -------------------------' example 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。 下一个:n命令 * $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。 变形:y命令 * $ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。 退出:q命令 * $ sed '10q' example-----打印完第10行后,退出sed。 保持和获取:h命令和G命令 * $ sed -e '/test/h' -e '$G example-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。 保持和互换:h命令和x命令 * $ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。 7. 脚本 Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。

单IP单端口监听多实例配置

# tnsnames.ora Network Configuration File: $ORACLE_HOME/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

N1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.179.133)(PORT = 1521))
)

(CONNECT_DATA =
(SERVICE_NAME = N1)
)
)

N2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.179.133)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = N2)
)
)

LISTENER_N1 =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

LISTENER_N2 =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

INST1_HTTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.179.133)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME =MODOSE)
(PRESENTATION = http://HRService)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

# listener.ora Network Configuration File: $ORACLE_HOME/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.179.133)(PORT = 1521))
)
)
)

ADR_BASE_LISTENER = /path/to/apptop

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /path/to/oracle/home)
(PROGRAM = extproc)
)

(SID_DESC =
(GLOBAL DBNAME = N1)
(ORACLE_HOME = /path/to/oracle/home)
(SID_NAME = N1)
)

(SID_DESC =
(GLOBAL DBNAME = N2)
(ORACLE_HOME = /path/to/oracle/home)
(SID_NAME = N2)
)
)

我的车该加93号还是97号油

关于这个问题,很多=新车主都在研究。究竟有没有结论呢?恐怕还没有一个“权威”的解释。

讨论加哪个之前,需要先要搞清楚它们之间有什么区别。不能人云则云。

这里涉及到一个概念,爆震(knoking)。简单的发动机原理大家都懂,油气混和->点火->燃烧做功,爆震出现在点火阶段。正常的点火是活塞达到压缩最高点之前的很短时间内,火花塞点火,油气混和物燃烧。爆震是由于油气混和物由于压力和温度达到燃点产生自燃。自燃发生的爆炸扩散速度远远大于火花塞点火燃烧的速度,这就导致爆震。由于燃烧速度快,瞬间将油气混和物燃烧光,释放的能量被活塞和连杆等传动系统阻力吸收,导致动力输出损耗。所以爆震越频繁,越废油,也是97号油比93号油省的原因。

93和97的区别是防爆系数,有些文章说97号省油,那么前提是在用93号油产生爆震的几率高的情况下。如果93和97都不产生爆震的话,是不会省油的。

那么怎么判断我的车该加什么标号的油呢。标准就是压缩比(油气混和物压缩前体积和压缩后体积之比)。一般来说压缩比在10:1左右的发动机需要97号汽油,压缩比在9:1左右的发动机需要93号汽油。这也是个常识,压缩的越厉害,越容易发生自燃。

但实际情况往往都不局限于理论,而有很大的发挥空间。

前段时间看到一篇“内幕”文章,说国产97号油是通过压缩提纯的方法用低标号的“提纯”出来的,而不是从原油“提炼”出来的,总体质量不如93的。真假就无从考证了。而且国外很多加油站甚至还有90号以下的汽油。

关于爆震不得不提的就似乎爆震厉害的话会损伤发动机,而且爆震还会导致发动机动力下降。如果每个做功冲程都产生爆震,那能非常明显的感觉到发动机动力不够。偶尔的爆震对发动机影响并不是很大。
增加爆震几率的因素很多,比如发动机积碳,工作温度等客观因素。而且也不是说97号的油就不会产生爆震,97号只是抗爆性比93号强。加97号油依然也会因为一些客观因素影响,或者点火偏早等技术故障等因素产生爆震。

93号和97号油产生爆震的机率由于无法量化,所以也无法衡量对发动机的影响。各位看官自己根据自己的情况判断吧。

有的汽车的发动机虽然高压缩比但是却建议使用低标号的油,这个应该是厂家从“多方面因素”考虑的吧。

折中的方案可能是在天热和机油相对比较脏的情况下,加97的。虽然增加出行成本,但是可以一定程度保护发动机。

93和97的区别是防爆系数,有些文章说97号省油,那么前提是在用93号油产生爆震的情况下。
如果93和97都不产生爆震的话,是不会省油的。

用好你的电池

笔记本电脑的优势在于其移动性,无论是3公斤以上的全内置型产品,还是1.5公斤以下的超便携笔记本,由于提供了电池模块,所以它们可在脱离外接供电的情况下继续工作,是移动计算的必备武器。电池在笔记本电脑中占有举足轻重的地位,但对于如何正确使用笔记本电脑的电池,却存在着各种各样的说法,我们咨询了在笔记本电脑设计研发方面有丰富经验的专业人员,并结合自己的使用经验,向您简单介绍一下如何善待自己的笔记本电池。
首先,目前流行着一种做法,即在长时间使用市电工作时,很多使用者会将笔记本电脑的电池卸下,认为这样能够延长电池寿命,其实卸下与否并没有太大的影响。对于没有卸下电池的使用者,需要注意的是不要频繁插拔电源,这是因为看似不起眼的短时间插拔电源,也会在电池中产生充放电的过程,频繁的充放电操作会缩短电池的寿命;而对于将电池放在一边的使用者来说,最好每隔一段时间(约一个月左右),就将电池放入笔记本电脑进行回充,这样便可保持电池的最佳状态,如果电池闲置太久,会导致容量减小。

其次,对于锂离子电池,没有必要将电量耗尽再进行充电,这是因为锂离子电池几乎没有记忆效应。所谓记忆效应是发生在镍铬电池或镍氢电池上的,这些电池在没有完全放电的情况下,会产生一种结晶反应,从而造成电池容量的暂时性减小,如果要消除这种记忆效应,可将电池做几次完全的充放电循环,还有可能将电池挽救回来。

部分使用者抱怨有些电池自带的电量显示功能可信度不高,事实上,这些产品中存在一个专门计算电池容量的芯片。一般来说,笔记本电脑中电池百分比的显示还是具有一定可信度的,需要注意的是每隔一段时间,最好为电池做校准操作,来校正计算电池容量芯片可能产生的误差。校准工作可通过两种方法进行:拔掉外接电源,关掉电源管理中的省电模式,并将电脑自行放电至关机;使用BIOS中或者随机提供的相关软件进行校准。

另外一个需要注意的问题便是使用的环境,虽然移动计算会遇到各种各样的环境,但在室温下使用对保证电池寿命还是有一定好处的,过冷过热的环境温度对笔记本电脑都会造成伤害。此外,当使用变压器操作时,来自外界的电源会一方面支持系统运行,一方面对电池进行充电,这样的充电过程相比在关机状态下的充电操作,会慢一些,如果想快速充电,最好还是在关机状态下进行。

总之,如果能在使用中注意不要频繁拔插电源,定期做电池的校准工作,并尽量在室温环境下进行操作的话,笔记本电池将会陪伴你更长的时间。

Excel中取得工作表名称

=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))

解释一下公式

首先看RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename")))部分,这里是取得当前文件的文件名,比如文件保存在D盘根目录下命名为Book1.xls,那么此处返回值为"D:\\[Book1.xls]Sheet1",其中Sheet1就是当前工作表的名称。
注:新建文件使用此函数将返回空值,至少需要保存至磁盘并关闭文件,然后直接由磁盘上打开时才会返回正确路径。

通过上面这步我们发现,返回值中是包含我们所需要的工作表名称的,接下来就是要把它分力出来。不难发现这个返回结果里面有个特点,就是文件名由[]包围,文件名之后就是工作表名。这里就需要一个函数来识别[]用于定位返回值里面到什么位置为止是文件名,因为我们需要的是剩下的信息。
FIND函数能满足我们的需求,所以对CELL("filename")的返回值进行处理,那么就是FIND("]",CELL("filename")),这里会返回]在返回值的字符串中所处的位置,是一个数字,告诉我们第几个字符是“]”,这里我们得到的结果是14。
注:FIND函数只会返回第一个匹配字符的位置,所以如果目录或文件名内包含“]”的话,后面取得的名称会有错误,如果文件名或路径名内必须包含“]”,那么需要更复杂的函数来统计个数,然后取得最后一个的位置。

接下来还要取得CELL("filename")返回的值的总长度,RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))。用这个总长度减去最有一个]的位置,得到的结果就是剩下的字符数,也就是工作表名称的长度。有了工作表名的长度之后我们就可以用RIGHT函数,来取得CELL("filename")返回值的后FIND("]",CELL("filename"))各字符 —— 我们需要的工作表名称。