ruby spreadsheet是什么 如何读取 某一个值

Ruby操作excel文件首先需要在脚本里包含以下语句
require 'win32ole'
把win32ole包含进来后,就可以通过和windows下的excel
api进行交互来对excel文件进行读写了.
打开excel文件,对其中的sheet进行访问:
excel = WIN32OLE::new('excel.Application')
workbook = excel.Workbooks.Open('c:\examples\spreadsheet.xls')
worksheet = workbook.Worksheets(1) #定位到第一个sheet
worksheet.Select
worksheet.Range('a12')['Value']& #读取a12中的数据
data = worksheet.Range('a1:c12')['Value'] #将数据读入到一个二维表
找到第一处a列的值为空值
while worksheet.Range(&a#{line}&)['Value']
&& line=line+1
end #line的值为第一处空白行的行数
将第一列的值读入到一个数组中
line = '1'
while worksheet.Range(&a#{line}&)['Value']
&& data && worksheet.Range(&a#{line}:d#{line}&)['Value']
&& line.succ!
将数据写入到excel表格中
worksheet.Range('e2')['Value'] = Time.now.strftime '%d/%m/%Y' #单个值
worksheet.Range('a5:c5')['Value'] = ['Test', '25', 'result']& #将一个数组写入
调用宏定义
excel.Run('SortByNumber')
设置背景色
worksheet.Range('a3:f5').Interior['ColorIndex'] = 36 #pale yellow
# 将背景色恢复成无色
worksheet.Range('a3:f5').Interior['ColorIndex'] = -4142 # XlColorIndexNone constant
# 使用Excel constant
将背景色恢复成无色
worksheet.Range('a3:f5').Interior['ColorIndex'] = ExcelConst::XlColorIndexNone
workbook.Close(1)
workbook.SaveAs 'myfile.xls'
# 默认路径是系统定义的&我的文档&
excel.Quit
一些相对完整的代码片段
创建一个excel文件并保存
require 'win32ole'
excel = WIN32OLE.new(&excel.application&)
excel.visible = true&&&& # in case you want to see what happens
workbook = excel.workbooks.add
workbook.saveas('c:\examples\spreadsheet1.xls')
workbook.close
操作excel文件的几个重要元素
Excel =& workbook =& worksheet =& range(cell)
我理解的是excel为类名,workbook为一个具体的(excel文件)实例,创建好实例后,worksheet是实例(workbook,工作簿)中的一个工作表,然后可
以对工作表中的每个单元格(range(cell))进行具体的读写------------------按照这样操作肯定没有错,不过下面的这些语句又让我有些疑惑
excel.workbooks(&Mappe1&).worksheets(&Tabelle1&).range(&a1&).value #读取名为Mappe1的excel文件中工作表名为Tabelle1的a1单元格中的值
excel.worksheets(&Tabelle1&).range(&a1&).value #作用同第一条语句
excel.activeworkbook.activesheet.range(&a1&).value #作用同第一条语句
excel.activesheet.range(&a1&).value #作用同第一条语句
excel.range(&a1&).value #作用同第一条语句
excel可以直接操作所有的属性,默认为当前活跃的工作簿/工作表
对单元格的操作:
某个单元格: sheet.range(&a1&)
a1到c3的值:&& sheet.range(&a1&, &c3&)&
或 sheet.range(&a1:c3&)
第一列:&&& sheet.range(&a:a&)
第三行:&&& sheet.range(&3:3&)
获得单元格的值:
range.text& #读取值,返回为字符串格式,如果单元格内为数字,有可能会被截断小数点后的位数
sheet.range(&a1&).text&&
range.value& #读取值,数字不会截断
sheet.range(&a1&).value&&&&&&
对单元格设置值
sheet.range(&a1&).value = 1.2345
sheet.range(&a1&).value = '1.2345'
sheet.range(&a1:a10&).each{|cell|puts cell.value}
如果范围是一个矩形,则会按行循环迭代访问
sheet.range(&a1:b5&).each{|cell|puts cell.value}
block迭代,并打印出每行的第一个值
sheet.range(&b3:c7&).rows.each{|r|puts r.cells(1,1).value}
<span style="color:#、Ruby完美结束excel应用程序进程
在关闭excel之后,使用ole_free将所有的win对象释放
[cell, worksheet, worksheets, workbook, workbooks, xls_app].each {|obj| obj.ole_free}
调用ole_free方法将创建的所有win32对象回收释放,修改后代码如下:
require 'win32ole'
dir = 'd:\temp\test_excel.xls'
unless File.exist?(dir)
&&& file = File.new(dir, 'w&#43;')
&&& file.close
# 创建excel应用程序对象
xls_app = WIN32OLE.new(&Excel.Application&)
# 打开需要操作的excel文档
workbooks = xls_app.Workbooks
workbook& = workbooks.Open(dir)
# 初始化参数
worksheets = workbook.Worksheets
worksheet& = worksheets.item(1)
&&& cell = worksheet.cells(1, 1)
&&& cell.value = 'hello world!'
rescue Exception
&&& puts $!
&&& # 屏蔽弹出保存提示框
&&& xls_app.DisplayAlerts = false
&&& # 保存workbook
&&& workbook.Save
&&& # 关闭workbook
&&& workbook.Close
&&& # 结束excel应用程序
&&& xls_app.Quit
&&& # 释放com对象
&&& [cell, worksheet, worksheets, workbook, workbooks, xls_app].each {|obj| obj.ole_free}
puts &此时已调用方法结束excel应用程序&&&&
-& 打开任务管理器查看进程,发现此时excel
进程已结束
puts &hello world!&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4521次
排名:千里之外
转载:10篇
(1)(10)(1)(1)ruby: 读写excel文件
ruby: 读写excel文件 13:40:35分类: 测试工作中,批量的数据通常会放到excel表&#26684;中,测试输出的数据写回表&#26684;中,这样输入输出易于管理,同时清晰明了使用ruby来操作excel文件首先需要在脚本里包含以下语句require 'win32ole'把win32ole包含进来后,就可以通过和windows下的excel api进行交互来对excel文件进行读写了.打开excel文件,对其中的sheet进行访问:excel = WIN32OLE::new('excel.Application')workbook = excel.Workbooks.Open('c:/examples/spreadsheet.xls')worksheet = workbook.Worksheets(1) #定位到第一个sheetworksheet.Select 读取数据:worksheet.Range('a12')['Value']& #读取a12中的数据data = worksheet.Range('a1:c12')['Value'] #将数据读入到一个二维表找到第一处a列的&#20540;为空&#20540;line = 1while worksheet.Range(&a#{line}&)['Value']&& line=line&#43;1end #line的&#20540;为第一处空白行的行数将第一列的&#20540;读入到一个数组中line = '1'data = []while worksheet.Range(&a#{line}&)['Value']&& data && worksheet.Range(&a#{line}:d#{line}&)['Value']&& line.succ!end将数据写入到excel表&#26684;中worksheet.Range('e2')['Value'] = Time.now.strftime '%d/%m/%Y' #单个&#20540;worksheet.Range('a5:c5')['Value'] = ['Test', '25', 'result']& #将一个数组写入调用宏定义excel.Run('SortByNumber')设置背景色worksheet.Range('a3:f5').Interior['ColorIndex'] = 36 #pale yellow# 将背景色恢复成无色worksheet.Range('a3:f5').Interior['ColorIndex'] = -4142 # XlColorIndexNone constant# 使用Excel constant 将背景色恢复成无色worksheet.Range('a3:f5').Interior['ColorIndex'] = ExcelConst::XlColorIndexNone保存workbook.Close(1)# 或workbook.SaveAs 'myfile.xls'# 默认路径是系统定义的&我的文档&结束会话excel.Quit一些相对完整的代码片段创建一个excel文件并保存require 'win32ole'excel = WIN32OLE.new(&excel.application&)excel.visible = true&&&& # in case you want to see what happens workbook = excel.workbooks.addworkbook.saveas('c:/examples/spreadsheet1.xls')workbook.close操作excel文件的几个重要元素Excel =& workbook =& worksheet =& range(cell)我理解的是excel为类名,workbook为一个具体的(excel文件)实例,创建好实例后,worksheet是实例(workbook,工作簿)中的一个工作表,然后可以对工作表中的每个单元&#26684;(range(cell))进行具体的读写------------------按照这样操作肯定没有错,不过下面的这些语句又让我有些疑惑excel.workbooks(&Mappe1&).worksheets(&Tabelle1&).range(&a1&).value #读取名为Mappe1的excel文件中工作表名为Tabelle1的a1单元&#26684;中的&#20540;excel.worksheets(&Tabelle1&).range(&a1&).value #作用同第一条语句excel.activeworkbook.activesheet.range(&a1&).value #作用同第一条语句excel.activesheet.range(&a1&).value #作用同第一条语句excel.range(&a1&).value #作用同第一条语句excel可以直接操作所有的属性,默认为当前活跃的工作簿/工作表对单元&#26684;的操作:某个单元&#26684;: sheet.range(&a1&)a1到c3的&#20540;:&& sheet.range(&a1&, &c3&)& 或 sheet.range(&a1:c3&)第一列:&&& sheet.range(&a:a&)第三行:&&& sheet.range(&3:3&)获得单元&#26684;的&#20540;:range.text& #读取&#20540;,返回为字符串&#26684;式,如果单元&#26684;内为数字,有可能会被截断小数点后的位数sheet.range(&a1&).text&& range.value& #读取&#20540;,数字不会截断sheet.range(&a1&).value&&&&&& 对单元&#26684;设置&#20540;sheet.range(&a1&).value = 1.2345或sheet.range(&a1&).value = '1.2345'迭代访问:sheet.range(&a1:a10&).each{|cell|puts cell.value}如果范围是一个矩形,则会按行循环迭代访问sheet.range(&a1:b5&).each{|cell|puts cell.value}block迭代,并打印出每行的第一个&#20540;sheet.range(&b3:c7&).rows.each{|r|puts r.cells(1,1).value}
最新教程周点击榜
微信扫一扫ruby 基础知识(一)_Ruby_ThinkSAAS
ruby 基础知识(一)
ruby 基础知识(一)
  突然今天发现一大神的博客:/jackluo/archive//2871655.html
相信初学者会受益颇多&#13;
参考文档:/ruby/&#13;
变量类型&#13;
局部变量(或伪变量)&#13;
以小写字母或下划线卡头&#13;
全局变量&#13;
以$开头&#13;
类变量&#13;
类中定义,以@@开头&#13;
@@var&#13;
实例变量&#13;
对象中定义,&#13;
以大写字母开头&#13;
一 ruby 中的关键字&#13;
1.模块定义:module&#13;
2.方法定义:def , undef&#13;
3.检查类型:defined?&#13;
4.循环语句:redo 重新开始循环,从这一次开始,retry 重头开始这个循环体,yield ,next 忽略本次循环的剩余部分,开始下一次的循环&#13;
5.逻辑判断:not ,and ,or&#13;
6.空值:true ,false , nil&#13;
7.异常处理:rescue ,ensure&#13;
Ruby中用begin/end …rescue…ensure … raise 来处理异常,retry可以用在rescue中。可以只用rescue或是ensure,两者都使用时,rescue必须在ensure前。&#13;
8.对象引用:super ,self&#13;
9.块的起始:begin/end&#13;
10.文件相关:__FILE__ , __LINE__&#13;
11.别名: alias&#13;
二 ruby的数据类型&#13;
1.数字,字符串,数组,哈希表,区间,正则表达式&#13;
2.数组的每个元素可以是不同的类型:[ 2.4, 99,“thank you”,[ a, b ,c ] ,78 ]&#13;
3.区间:1..5 表示1,2,3,4,5 &#13;
1...5表示1,2,3,4 &#13;
三 ruby 的赋值运算(#号后面的是结果)&#13;
a = 1 ;b = 2 + 3 #a=1 ,b=5&#13;
a ,b = b ,a
#a=5 ,b=1&#13;
a = b = 1 + 2 + 3 #a=6 ,b=6&#13;
a = (b = 1 + 2) + 3 #a=6 ,b=3&#13;
x = 0 #x=0&#13;
a,b,c = x, (x+1), (x+2) #a=0 ,b=1,c=2&#13;
四 条件运算符&#13;
比较两个对象的大小,大于、等于、小于 分别返回1,0,-1&#13;
"aab" &=& "acb" # -1 (第二个 a 的 ASCII 码小于 c)&#13;
[5] &=& [4,9] # 1 (第一个元素 5 & 4)&#13;
右边的对象是否在左边区间之内,返回 true, flase&#13;
puts (0..9)=== 3.14 #true&#13;
puts (&a&..&f&)=== &c& # true&#13;
=~(匹配)&#13;
用来比较是否符合一个正则表达式,返回模式在字符串中被匹配到的位置,否则返回 nil&#13;
!~ (不匹配)&#13;
断言不符合一个正则表达式,返回 true, flase&#13;
小于等于 小于 大于 大于等于&#13;
五 条件判断语句&#13;
case when&#13;
case x&#13;
when 1..2&#13;
print "x=",x,";在 1..2中"&#13;
when 4..9, 0&#13;
print "x=",x,";在4..9,0中,或是0"&#13;
print "x=",x,";其它可能"&#13;
2. until&#13;
until a &=10&#13;
print a," "&#13;
a=a+1&#13;
3. while&#13;
while a &10&#13;
print a," "&#13;
a=a+1&#13;
一边是while a &10,一边是until a &=10,其它代码都一样,结果也一样&#13;
4. for in &#13;
for i in 1..9&#13;
print i," "&#13;
六 关键字&#13;
times , upto , downto , each ,step&#13;
3.times { print "Hi!" } #Hi!Hi!Hi!&#13;
1.upto(9) {|i| print i if i&7 } #123456&#13;
9.downto(1){|i| print i if i&7 } #654321&#13;
(1..9).each {|i| print i if i&7} #123456&#13;
0.step(11,3) {|i| print i } #0369&#13;
七 对象&#13;
1. 属性的简写&#13;
attr_writer :motherland 相当于&#13;
def motherland=(value)&#13;
return @motherland =value&#13;
attr_ reader :motherland 相当于&#13;
def motherland&#13;
return @motherland&#13;
attr_accessor :motherland 相当于attr_reader:motherland; attr_writer :motherland&#13;
代码书写规范&#13;
puts a&b ? "a&b" : "a&=b" # a&b&#13;
puts (a&b)? ("a&b") : ("a&=b") # a&b&#13;
#puts a&b? "a&b" : "a&=b" 错误语句&#13;
九 面向对象(重写 重载)&#13;
1.Ruby语言,只有重写,没有其它语言具有的严格意义上的重载&#13;
2.Ruby还支持可变参数,我们看程序 E6.1-2.rb :&#13;
def sum( *num )&#13;
numSum = 0&#13;
num.each { |i| numSum+=i }&#13;
return numSum&#13;
puts sum() #0&#13;
puts sum(3,6) #9&#13;
puts sum(1,2,3,4,5,6,7,8,9) #45&#13;
十 实例变量、类变量、类方法&#13;
class StudentClass&#13;
@@count=0&#13;
def initialize&#13;
@@count+=1&#13;
def StudentClass.student_count&#13;
puts "This class have #@@count students."&#13;
p1=StudentClass.new&#13;
p2=StudentClass.new&#13;
StudentClass.student_count # This class have 2 students.&#13;
p3=StudentClass.new&#13;
p4=StudentClass.new&#13;
StudentClass.student_count # This class have 2 students.&#13;
十一 单例方法&#13;
class Person&#13;
def talk&#13;
puts "Hi! "&#13;
p1=Person.new&#13;
p2=Person.new&#13;
def p2.talk #定义单例方法p2.talk&#13;
puts "Here is p2. "&#13;
def p2.laugh #定义单例方法p2. laugh&#13;
puts "ha,ha,ha... "&#13;
p1.talk # Hello!&#13;
p2.talk # Here is p2.&#13;
p2.laugh # ha,ha,ha...&#13;
单例方法也叫作单件方法。定义单例方法,首先要生成一个实例对象,其次,要在方法名前加上对象名和一个点号“.”&#13;
十二 模块&#13;
Math 模块提供了许多方法,比如:求平方根 sqrt ,使用的时候要这么写:模块名.方法名(参数)&#13;
你可以 Math.sqrt(37.2/3) ,Math.sqrt( a*5+b ) &#13;
Math 模块还提供了两个常量,圆周率π 和自然对数底 e,使用的时候要这么写:模块名::常量名。&#13;
定义模块用module...end 。模块与类非常相似,但是:&#13;
A) 模块不可以有实例对象;&#13;
B) 模块不可以有子类。&#13;
十三 糅和(Mix-in) 与多重继承&#13;
1.我们有一个Student类,有着Person类的属性和方法,还会做数学题——求平方根。已经有了Me模块,只要Mix-in 在Student类里就可以了。&#13;
看程序 &#13;
module Me&#13;
def sqrt(num, rx=1, e=1e-10)&#13;
num*=1.0&#13;
(num - rx*rx).abs &e ? rx : sqrt(num, (num/rx + rx)/2, e)&#13;
class Person&#13;
def talk&#13;
puts "I&m talking."&#13;
class Student & Person&#13;
include Me&#13;
aStudent=Student.new&#13;
aStudent.talk # I&m talking.&#13;
puts aStudent.sqrt(20.7,3.3) # 4.48&#13;
2.include 方法相对应的,还有一个 extend 方法。如果并不是Student类的每个对象都会求平方根,只有某一个学生会,如何办到呢?&#13;
module Me&#13;
def sqrt(num, rx=1, e=1e-10)&#13;
num*=1.0&#13;
(num - rx*rx).abs &e ? rx : sqrt(num, (num/rx + rx)/2, e)&#13;
class Student&#13;
aStudent=Student.new&#13;
aStudent.extend(Me)&#13;
puts aStudent.sqrt(93.1, 25) # 9.15&#13;
require&#13;
require,load用于包含文件;include,extend则用于包含模块。&#13;
require加载文件一次,load加载文件多次。&#13;
require加载文件时可以不加后缀名,load加载文件时必须加后缀名。&#13;
require一般情况下用于加载库文件,而load用于加载配置文件。&#13;
利用load 多次加载文件的特性,可以用来实现程序的无缝升级和系统的热部署。程序功能改变了,你只需要重新load 一次,其它代码与它再次交互的时候,这个程序实际上已经不是原来的程序了&#13;
字符串详解&#13;
str1 = &this is str1&&#13;
str2 = "this is str2"&#13;
str3 = %q/this is str3/&#13;
str4 = %Q/this is str4/&#13;
str5 = &&OK_str&#13;
Here is string document, str5&#13;
line three.&#13;
OK_str&#13;
puts str3&#13;
puts str4&#13;
puts str5&#13;
运行结果:&#13;
this is str3&#13;
this is str4&#13;
Here is string document, str5&#13;
line three.&#13;
1.%q 用来生成单引号字符串;%Q用来生成双引号字符串。%q或者%Q后面跟着的是分隔符,可以是配对的! !; / /; & &; ( ); [ ] ;{ };等等&#13;
2.str5是一个字符串文档,从 &&文档结束符的下一行开始,直到遇到一个放置在行首的文档结束符,结束整个字符串文档。&#13;
3.一个数组可以用join 方法转换成字符串,join( ) 内的参数也是一个字符串,用来分隔数组的每个元素,例如:arr.join(", ")&#13;
4.字符串操作&#13;
str = & this& + " is"&#13;
str += " you"&#13;
str && " string" && " ."&#13;
puts str*2
# this is you string . this is you string .&#13;
str = " tthis is you string ."&#13;
this is you string .&#13;
(2) 字符串内嵌表达式&#13;
Ruby表达式在 #{ } 之中,这些表达式在使用这个字符串的时候被计算出值,然后放入字符串&#13;
def hello(name)&#13;
" Welcome, #{name} !"&#13;
puts hello("kaichuan") # Welcome, kaichuan !&#13;
puts hello("Ben") # Welcome, Ben !&#13;
十六 正则表达式&#13;
1.Ruby中,可以使用构造器显式地创建一个正则表达式,也可以使用字面值形式 /正则模式/ 来创建一个正则表达式&#13;
str="Hello,kaichuan,Welcome!"&#13;
puts str =~ /kaichuan/ #6&#13;
puts str =~ /a/ #7&#13;
puts str =~ /ABC/ #nil&#13;
在字符串str中找我的名字 kaichuan。找到了,在字符串str的第6个字符处。和数组一样,字符串的起始索引位置是0。&#13;
2.不匹配一个正则表达式,用“!~” ,不能用“!=”。 “!~”用来断言不符合一个正则表达式,返回 true,flase&#13;
str="Hello,kaichuan,Welcome!"&#13;
puts str !~ /kaichuan/ # false&#13;
puts str !~ /a/ # false&#13;
puts str !~ /ABC/ # true&#13;
3.将文章中所有的windows2000 或者 windows98 换成 Windows XP,不论单词开头大小写,但是不带数字的windows不换;并且要把日改成当前时间&#13;
strdoc=&&DOC_EOF&#13;
This is windows2000 or windows98 system.&#13;
Windows system is BEST?&#13;
Windows2000 running in 12-31-2006,……&#13;
DOC_EOF&#13;
re = /[w|W]indows(?:98|2000) /&#13;
strdoc.gsub!(re, "Windows XP ")&#13;
re = /[1-9][0-9]-[1-9][0-9]-dddd/&#13;
time = Time.now.strftime("%m-%d-%Y")&#13;
strdoc.gsub!(re, time)&#13;
puts strdoc&#13;
strdoc.gsub!(re, "Windows XP "),是把字符串strdoc里所有匹配正则模式re的子串替换为 "Windows XP "。 gsub!是替换所有子串&#13;
strdoc.gsub!(re, time),是把字符串strdoc里所有匹配正则模式re的子串替换为字符串time。&#13;
time = Time.now.strftime("%m-%d-%Y"),取出系统当前时间,并且格式化成( 月-日-年 )的形式,生成一个字符串time。&#13;
十七 迭代器、代码块、闭包&#13;
(1..9).each {|i| print i if i&7}&#13;
迭代器each 是数组类的一个方法;大括号{ }里的代码是代码块,简称块。你可以用大括号{ }将代码组织成块,也可以用 do…end将代码组织成块。大括号{ }的优先级高于do…end&#13;
2.调用一个块要用关键字yield。每一次 yield,块就被调用一次&#13;
def one_block&#13;
yield&#13;
yield&#13;
yield&#13;
one_block { puts "This is a block. " }&#13;
运行结果:&#13;
This is a block.&#13;
This is a block.&#13;
This is a block.&#13;
3.一个块可以接收yield 传来的参数,还可以将结果返回给调用它的方法&#13;
def one_block&#13;
for num in 1..3&#13;
yield(num)&#13;
one_block do |i|&#13;
puts "This is block #{i}. "&#13;
运行结果:&#13;
This is block 1.&#13;
This is block 2.&#13;
This is block 3.&#13;
4.第一次do_something遇到yield,调用了代码块{ 输出1..9中小于5的数 } ;在程序的另一处do_something的时候,我们希望做一些不同的事,所以我们写了一个不同于前一次的代码块{ 输出3次“Hi!”}。&#13;
这是一个简单的例子,但是你能发现其中的技巧:先写出方法的大致框架,调用方法的时候才告诉方法要作什么&#13;
def do_something&#13;
yield&#13;
do_something do&#13;
(1..9).each {|i| print i if i&5}&#13;
do_something do&#13;
3.times { print "Hi!" }&#13;
5.代码块是一段代码,相当于一个匿名方法,被调用它的方法所调用&#13;
class Array&#13;
def one_by_one&#13;
for i in 0...size&#13;
yield(self[i] )&#13;
arr = [1,3,5,7,9]&#13;
arr.one_by_one {|k| print k , ", "} # 1, 3, 5, 7, 9,&#13;
arr.one_by_one {|h| print h*h, ", "} # 1, 9, 25, 49, 81,&#13;
6.闭包也是一段代码,一个代码块,而且能够共享其它方法的局部变量&#13;
def method(pr)&#13;
puts pr.call(7)&#13;
oneProc=proc{|k| k *=3 }&#13;
method(oneProc)&#13;
运行结果:&#13;
&ruby E8.4-4.rb&#13;
&Exit code: 0&#13;
再看一个闭包共享其它方法局部变量的例子;&#13;
def method(n)&#13;
return proc{|i| n +=i }&#13;
oneProc=method(3)&#13;
puts oneProc.call(9) #12&#13;
puts oneProc.call(5) #17&#13;
方法method 返回一个Proc对象,这个对象引用了这个函数的参数:n 。即使 n这个参数在闭包被调用时已经不在自己的作用域里了,这个闭包还是可以访问 n这个参数,并且和方法method 共同拥有变量 n 。开始的时候,方法method 的变量 n是3;oneProc.call(9)的时候,oneProc更新了变量 n,把n=12传回给方法method;oneProc.call(5)的时候,oneProc取出方法method的变量 n=12,更新为n=17,传回给方法method的同时,也把n=17作为自己的返回值输出。&#13;
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信

我要回帖

更多关于 spreadsheet是什么 的文章

 

随机推荐