Ruby操作Excel【转】

作者:数据库

搞掂。

自身将sql语句制作成一个sql文件,以文件的主意实践,果然,十几秒钟就施行完毕。

1、工作簿

 Workbooks 代表工作簿集合,所有的工作簿,Workbooks(N),表示已打开的第N个工作簿
 Workbooks ("工作簿名称")
 ActiveWorkbook 正在操作的工作簿
 ThisWorkBook 代码所在的工作簿      

调用宏定义

excel.Run('SortByNumber')

只需语句顶上部分加一句:

难题,给您四个Excel数据文件,要求往mysql的数据库中程导弹入数据。

CH1 VBA基础知识

将数据写入到excel表格中

worksheet.Range('e2')['Value'] = Time.now.strftime '%d/%m/%Y' #单个值
worksheet.Range('a5:c5')['Value'] = ['Test', '25', 'result']  #将一个数组写入
SET ANSI_WARNINGS OFF;

怎么着往mysql中导数据实践功用高

一、在单元格中输入公式

迭代作客:

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}

这么些警示在常规场景中没什么影响,但若是是用excel跑SQL,它会因为该警告阻止你的承袭操作~事实上excel推行sql限制多多,须要越来越多的奇技淫巧,在此以前本身就写过一篇。言归正传,要化解那一个警示,一种自然是在讲话中用到聚合函数的地点统统加上isnull,但假设语句非常长,地点重重就蛋疼了,于是笔者引入另多少个更优雅的做法:

敲定:以文件方式实行sql语句比新建查询语句推行sql语句功用高得多。

1、用VBA在单元格中输入常见公式

 Sub t1()
   Range("d2") = "=b2*c2"
 End Sub

 Sub t2()
  Dim x As Integer
  For x = 2 To 6
   Cells(x, 4) = "=b" & x & "*c" & x
  Next x
 End Sub

设置背景象

worksheet.Range('a3:f5').Interior['ColorIndex'] = 36 #pale yellow

- EOF -

 

CH4 分支与END语句

创设excel应用程序对象

excel = WIN32OLE.new("Excel.Application")

最开始没考虑施行效用,作者转载为sql语句后,用navicat作为数据库查看的分界面,然后新建查询,将组织好的sql语句粘到里面,施行,然后sql语句初始疯跑,3万多条记下,实施了八百多秒,十五分钟啊,太慢了,当时没放在心上。后来,开掘导入的多寡有个别地点因为excel格式而发生难点,于是又再度协会,再往数据库中程导弹。又是短期的等待。。。

2、工作表

Sheets("职业表名称")
Sheet1 表示第四个插入的专门的学业表,Sheet2意味着第二个插入的职业表....
Sheets(n) 表示按排列顺序,第n个工作表
ActiveSheet 表示活动职业表,光标所在职业表
worksheet 也代表专门的学问表,但不包蕴图片专业表、宏工作表等。

终结会话

excel.Quit

首先,你得遵照对应表字段对excel数据文件举办结构,然后转向为insert的sql语句,然后往数据库中插入。

6.变量

(1)什么是变量?
所谓变量,正是可变的量。就好象在内部存款和储蓄器中有时贮存的八个小盒子,这些小盒子放的怎么物体不固定。

  Sub t1()
        Dim X As Integer x就是一个变量
        For X = 1 To 10
                Cells(X, 1) = X
        Next X
  End Sub

(2)变量的门类和注明

A.变量的品种

byte 字符型(0-255)
integer 整数型(-32768-32767)
long 长整数型
single 单精度浮点型
double 双精度浮点型
currency 货币型
decimal 小数型
string 字符串型 (数字 文本)
date 日期型
boolean 布尔型 (逻辑决断)
variant 万能型

B.注明变量

  dim 变量名 as 数据类型

  dim str as string

C.如给文本、数值、日期等数据型变量赋值
let 变量名称 =数据
如给目的变量(object型,如单元格)赋值
set 变量名称=对象
e.g

    set rng=worksheets("sheet1").range("a1")
    rng.value="欢迎"

行使常量
const 变量名称 as 数据类型-数值

   const p as single =3.14

(3)变量的幸存周期

1 进度级变量:进度甘休,变量值释放

   如t1

2 模块级变量:变量的值只在本模块中维系,职业簿关闭时随时释放
例5

     Sub t6()
        m = 1
     End Sub
     Sub t5()
      MsgBox m
      m = 7
     End Sub

3 全局级变量: 在富有的模块中都能够调用,值会保存到EXCEL关闭时才会被释放。

   public 变量

     Sub t7()
       MsgBox qq
     End Sub

(4)变量的放飞

貌似景观下,进程级变量在进度运维截止后就能够自动从内部存款和储蓄器中自由,而独有一部分从外表借用的靶子变量才要求采取set 变量=nothing进行释放。
<br />


<br />

读取数据:

worksheet.Range('a12')['Value']  #读取a12中的数据
data = worksheet.Range('a1:c12')['Value'] #将数据读入到一个二维表

于是开头讨论:将一张表导出为sql语句再实行、将整个数据库导出再施行好像并不曾这么慢啊!

二、VBA方法和总体性

张开excel文件,对中间的sheet实行访问:

excel = WIN32OLE::new('excel.Application')
workbook = excel.Workbooks.Open('c:examplesspreadsheet.xls')
worksheet = workbook.Worksheets(1) #定位到第一个sheet
worksheet.Select

难题,给您二个Excel数据文件,必要往mysql的数据库中程导弹入数据。 首先,你得遵从对应表字段对excel数据文件...

二、Exit语句

剥离钦点的话语

1、Exit Sub

 Sub e1()
 Dim x As Integer
    For x = 1 To 100
      Cells(1, 1) = x
      If x = 5 Then
        Exit Sub
      End If
     Next x
  Range("b1") = 100
 End Sub

2、Exit function

 Function ff()
 Dim x As Integer
    For x = 1 To 100
      If x = 5 Then
        Exit Function
      End If
     Next x
  ff = 100
 End Function

3、Exit for

Sub e2()     
 Dim x As Integer
    For x = 1 To 100
      Cells(1, 1) = x
      If x = 5 Then
        Exit For
      End If
     Next x

   Range("b1") = 100
 End Sub

4、Exit do

 Sub e3()
 Dim x As Integer
   Do
     x = x   1
      Cells(1, 1) = x
      If x = 5 Then
        Exit Do
      End If
   Loop Until x = 100
   Range("b1") = 100
 End Sub

找到第一处a列的值为空值

line = 1
while worksheet.Range("a#{line}")['Value']
   line=line 1
end #line的值为第一处空白行的行数

CH4 分支与END语句

workbook.SaveAs 'myfile.xls' //默认路径是系统定义的"我的文档"

目录

操作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能够平素操作全体的习性,默感觉当前活蹦乱跳的专门的事业簿/专业表

本文由ca88发布,转载请注明来源

关键词: ca88网址 亚洲城 VBA For... 读书笔记 Ruby每日学习