office_elin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +675 -0
- data/README.md +3 -0
- data/lib/excel_office.rb +417 -0
- data/lib/excel_wps.rb +433 -0
- data/lib/office.rb +9 -0
- data/lib/os.rb +24 -0
- data/lib/string.rb +29 -0
- data/lib/word_wps.rb +488 -0
- metadata +52 -0
data/lib/word_wps.rb
ADDED
@@ -0,0 +1,488 @@
|
|
1
|
+
module WordWps
|
2
|
+
class Word
|
3
|
+
|
4
|
+
def initialize(encoding = "utf-8")
|
5
|
+
|
6
|
+
if OS.windows?
|
7
|
+
require "win32ole"
|
8
|
+
else
|
9
|
+
print "只有Windows系统才能使用Excel模块"
|
10
|
+
exit 0
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
@word = WIN32OLE.new("Word.Application")
|
15
|
+
@word.visible = false
|
16
|
+
@encoding = encoding
|
17
|
+
end
|
18
|
+
|
19
|
+
# 警告提示开关
|
20
|
+
def display_alerts=(bool)
|
21
|
+
@word.DisplayAlerts = bool
|
22
|
+
end
|
23
|
+
|
24
|
+
def init_document
|
25
|
+
@document = @word.Documents.add
|
26
|
+
return Document.new(@document, @word)
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def show
|
31
|
+
@word.visible = true
|
32
|
+
end
|
33
|
+
|
34
|
+
def save(path)
|
35
|
+
@document.saveas(path)
|
36
|
+
end
|
37
|
+
|
38
|
+
def close
|
39
|
+
@document.close
|
40
|
+
@word.quit
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# 对文本控件的调用
|
45
|
+
class Document
|
46
|
+
|
47
|
+
def initialize(document, word)
|
48
|
+
@doc_work = document
|
49
|
+
@word = word
|
50
|
+
#@text = Text.new(@word.Selection, self)
|
51
|
+
create_style
|
52
|
+
end
|
53
|
+
|
54
|
+
# ActiveDocument
|
55
|
+
def doc_work
|
56
|
+
@doc_work
|
57
|
+
end
|
58
|
+
|
59
|
+
# 自动化对象
|
60
|
+
def word_basic
|
61
|
+
doc_work.Application.WordBasic
|
62
|
+
end
|
63
|
+
|
64
|
+
# 创建样式
|
65
|
+
def create_style
|
66
|
+
|
67
|
+
# 正文 楷体五号
|
68
|
+
sty = @doc_work.styles("正文")
|
69
|
+
sty.font.size = 10
|
70
|
+
sty.font.NameFarEast = "宋体"
|
71
|
+
sty.font.NameAscii = "Times New Roman"
|
72
|
+
sty.font.NameOther = "Times New Roman"
|
73
|
+
sty.ParagraphFormat.Alignment = 3
|
74
|
+
sty.ParagraphFormat.LineSpacingRule = 1
|
75
|
+
sty.NextParagraphStyle = "正文"
|
76
|
+
|
77
|
+
# 楷体3号字体
|
78
|
+
sty = @doc_work.styles.add("Cover 1", 1)
|
79
|
+
sty.font.size = 16
|
80
|
+
sty.font.NameFarEast = "楷体"
|
81
|
+
sty.font.NameAscii = "Times New Roman"
|
82
|
+
sty.font.NameOther = "Times New Roman"
|
83
|
+
end
|
84
|
+
|
85
|
+
# 由实例自己创建风格
|
86
|
+
def create_style_self(name)
|
87
|
+
sty = @doc_work.styles.add(name, 1)
|
88
|
+
yield sty
|
89
|
+
end
|
90
|
+
|
91
|
+
# 返回Selection
|
92
|
+
def now
|
93
|
+
@word.Selection
|
94
|
+
end
|
95
|
+
|
96
|
+
# 返回Text类
|
97
|
+
def add_text
|
98
|
+
return Text.new(@word.Selection, self)
|
99
|
+
entry
|
100
|
+
end
|
101
|
+
|
102
|
+
# 风格设置
|
103
|
+
def styles(name)
|
104
|
+
@doc_work.Styles(name)
|
105
|
+
end
|
106
|
+
|
107
|
+
# 设置表格
|
108
|
+
def add_table(row, col)
|
109
|
+
@doc_work.tables.add(now.Range, row, col)
|
110
|
+
end
|
111
|
+
|
112
|
+
# 创建目录
|
113
|
+
def create_catalog
|
114
|
+
#range = doc_work.Range(0, 0)
|
115
|
+
range = now.range
|
116
|
+
doc_work.TablesOfContents.Add(
|
117
|
+
range, # Range
|
118
|
+
true, # UseHeadingStyles
|
119
|
+
1, # UpperHeadingLevel
|
120
|
+
3, # LowerHeadingLevel default: 9
|
121
|
+
false, # UseFields
|
122
|
+
nil, # TableId
|
123
|
+
true, # RightAlignPageNumbers
|
124
|
+
true, # IncludePageNumbers
|
125
|
+
"", # AddedStyles
|
126
|
+
true, # UseHyperlinks
|
127
|
+
true, # HidePageNumbersInWeb
|
128
|
+
true, # UseOutlineLevels default: false
|
129
|
+
)
|
130
|
+
|
131
|
+
# 换到下一行
|
132
|
+
move_down
|
133
|
+
end
|
134
|
+
|
135
|
+
# 更新目录
|
136
|
+
def update_catalog
|
137
|
+
word_basic.UpdateTableOfContents
|
138
|
+
end
|
139
|
+
|
140
|
+
# 回车
|
141
|
+
def entry
|
142
|
+
now.TypeParagraph
|
143
|
+
end
|
144
|
+
|
145
|
+
# 移动到行首
|
146
|
+
def home_key
|
147
|
+
now.HomeKey(5)
|
148
|
+
end
|
149
|
+
|
150
|
+
# 移动到行尾
|
151
|
+
def end_key
|
152
|
+
now.EndKey(5)
|
153
|
+
end
|
154
|
+
|
155
|
+
# 移动到下一行
|
156
|
+
def move_down
|
157
|
+
self.end_key
|
158
|
+
self.entry
|
159
|
+
end
|
160
|
+
|
161
|
+
# 右移
|
162
|
+
# count 数值, 移动距离
|
163
|
+
# ext 0or1 , 是否扩展
|
164
|
+
# unit wdCharachter
|
165
|
+
def move_right(count=nil, ext=nil, unit=nil)
|
166
|
+
now.MoveRight(unit, count, ext)
|
167
|
+
end
|
168
|
+
|
169
|
+
# 将厘米换算成磅
|
170
|
+
def cent_to_point(int)
|
171
|
+
@word.CentimetersToPoints(int)
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
# 只对内容服务
|
177
|
+
class Text
|
178
|
+
|
179
|
+
def initialize(selection, document)
|
180
|
+
# 现在所选项
|
181
|
+
@selection = selection
|
182
|
+
|
183
|
+
# Document 类
|
184
|
+
@document = document
|
185
|
+
end
|
186
|
+
|
187
|
+
# ActiveDocument
|
188
|
+
def doc_work
|
189
|
+
@document.doc_work
|
190
|
+
end
|
191
|
+
|
192
|
+
# ActiveDocument.Selecton
|
193
|
+
def now
|
194
|
+
@selection
|
195
|
+
end
|
196
|
+
|
197
|
+
# 调整字体
|
198
|
+
def font
|
199
|
+
now.Font
|
200
|
+
end
|
201
|
+
|
202
|
+
# 调整字体大小
|
203
|
+
def size=(int)
|
204
|
+
self.font.Size = int
|
205
|
+
end
|
206
|
+
|
207
|
+
# 文本左对齐
|
208
|
+
def left
|
209
|
+
now.ParagraphFormat.Alignment = 0
|
210
|
+
end
|
211
|
+
|
212
|
+
# 文本居中
|
213
|
+
def center
|
214
|
+
now.ParagraphFormat.Alignment = 1
|
215
|
+
end
|
216
|
+
|
217
|
+
# 文本右对齐
|
218
|
+
def right
|
219
|
+
now.ParagraphFormat.Alignment = 2
|
220
|
+
end
|
221
|
+
|
222
|
+
# 两端对其
|
223
|
+
def justify
|
224
|
+
now.ParagraphFormat.Alignment = 3
|
225
|
+
end
|
226
|
+
|
227
|
+
# 回车
|
228
|
+
def entry
|
229
|
+
@document.entry
|
230
|
+
end
|
231
|
+
|
232
|
+
# 移动到下一行
|
233
|
+
def move_down
|
234
|
+
@document.move_down
|
235
|
+
end
|
236
|
+
|
237
|
+
# 写入元数据
|
238
|
+
def print(str)
|
239
|
+
now.TypeText(str)
|
240
|
+
end
|
241
|
+
|
242
|
+
# 写入数据,抬头Tab, 并且换行
|
243
|
+
def puts(str)
|
244
|
+
now.TypeText("\t" + str)
|
245
|
+
self.entry
|
246
|
+
end
|
247
|
+
|
248
|
+
# 替换,并替换风格
|
249
|
+
def replace(find, replace, style)
|
250
|
+
rep_opt = now.Find
|
251
|
+
rep_opt.ClearFormatting
|
252
|
+
rep_opt.Replacement.ClearFormatting
|
253
|
+
rep_opt.Replacement.Style = doc_work.Styles(style)
|
254
|
+
rep_opt.Text = find
|
255
|
+
rep_opt.Replacement.Text = replace
|
256
|
+
rep_opt.Forward = true
|
257
|
+
rep_opt.wrap = 1 # 到达开头或结尾时继续搜索
|
258
|
+
rep_opt.Format = true
|
259
|
+
rep_opt.MatchCase = false
|
260
|
+
rep_opt.MatchWholeWord = false
|
261
|
+
rep_opt.MatchByte = true
|
262
|
+
rep_opt.MatchWildcards = false
|
263
|
+
rep_opt.MatchSoundsLike = false
|
264
|
+
rep_opt.MatchAllWordForms = false
|
265
|
+
|
266
|
+
rep_opt.Execute(nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,1)
|
267
|
+
end
|
268
|
+
|
269
|
+
|
270
|
+
# 设置风格
|
271
|
+
def style(name)
|
272
|
+
now.Style = @document.styles(name)
|
273
|
+
end
|
274
|
+
|
275
|
+
# 按一个段设置风格和内容
|
276
|
+
def section(style_name=nil)
|
277
|
+
self.style(style_name) unless style_name.nil?
|
278
|
+
res = yield
|
279
|
+
if res.kind_of? ::Array
|
280
|
+
res.join("\n")
|
281
|
+
end
|
282
|
+
print(res)
|
283
|
+
self.entry
|
284
|
+
end
|
285
|
+
|
286
|
+
# 插入表格,并返回Table类
|
287
|
+
def insert_table(row, col)
|
288
|
+
obj = @document.add_table(row, col)
|
289
|
+
Table.new(now, row, col, obj)
|
290
|
+
end
|
291
|
+
|
292
|
+
# 插入表格
|
293
|
+
def add_table(row, col, &block)
|
294
|
+
table = insert_table(row, col)
|
295
|
+
block.call(table)
|
296
|
+
|
297
|
+
# 跳出表格
|
298
|
+
now.MoveDown(5, 1)
|
299
|
+
end
|
300
|
+
|
301
|
+
# 通过已有的数组插入表格
|
302
|
+
def add_table_by_value(tbl, &block)
|
303
|
+
row = tbl.size
|
304
|
+
col = tbl[0].size
|
305
|
+
table = insert_table(row, col)
|
306
|
+
block.call(table)
|
307
|
+
|
308
|
+
# 保证在写入数据的时候在第一个单元格
|
309
|
+
table.top
|
310
|
+
# 一维化数组
|
311
|
+
table << tbl.flatten
|
312
|
+
# 跳出表格
|
313
|
+
now.MoveDown(5, 1)
|
314
|
+
end
|
315
|
+
|
316
|
+
# 插入头部的图片
|
317
|
+
def add_head_image(path)
|
318
|
+
self.first_line_indent = -2
|
319
|
+
add_image(path)
|
320
|
+
picture_size(1.25)
|
321
|
+
self.entry
|
322
|
+
self.first_line_indent = 0
|
323
|
+
end
|
324
|
+
|
325
|
+
# 插入图片
|
326
|
+
def add_image(path)
|
327
|
+
now.InlineShapes.AddPicture(path, false, true)
|
328
|
+
end
|
329
|
+
|
330
|
+
# 修改首行缩进(厘米)
|
331
|
+
def first_line_indent=(cent)
|
332
|
+
now.ParagraphFormat.FirstLineIndent = @document.cent_to_point(cent)
|
333
|
+
end
|
334
|
+
|
335
|
+
# 修改最近一个图片尺寸倍数
|
336
|
+
def picture_size(int)
|
337
|
+
num = doc_work.InlineShapes.Count
|
338
|
+
pic = doc_work.InlineShapes(num)
|
339
|
+
pic.width *= int
|
340
|
+
end
|
341
|
+
|
342
|
+
# 插入一条横线
|
343
|
+
def insert_line
|
344
|
+
|
345
|
+
# 通过导入图片的方法
|
346
|
+
path = File.join(BaseFile, "aio", "resource", "line.png")
|
347
|
+
self.add_image(path)
|
348
|
+
self.move_down
|
349
|
+
end
|
350
|
+
|
351
|
+
# 绘制图表
|
352
|
+
# 测试图表
|
353
|
+
#tbl = [
|
354
|
+
# ["a", "1"],
|
355
|
+
# ["b", "2"],
|
356
|
+
# ["c", "3"],
|
357
|
+
# ["d", "4"],
|
358
|
+
#]
|
359
|
+
#text.chart(tbl) do |chart|
|
360
|
+
# chart.title = "Name"
|
361
|
+
# chart.type = 5
|
362
|
+
# #chart.axes_x = "year"
|
363
|
+
# #chart.axes_y = "value"
|
364
|
+
# chart.style = 251
|
365
|
+
#end
|
366
|
+
def chart(tbl, &block)
|
367
|
+
begin
|
368
|
+
excel = ExcelWps::WorkBook.new
|
369
|
+
#excel.show
|
370
|
+
excel.display_alerts = false
|
371
|
+
worksheet = excel.add_worksheet("sheet")
|
372
|
+
tbl.each do |r|
|
373
|
+
worksheet.add_row { |row| row << r }
|
374
|
+
end
|
375
|
+
|
376
|
+
# 获取结束的单元格
|
377
|
+
col = tbl[0].size
|
378
|
+
end_cell = worksheet.current_row.cell_name(col - 1)
|
379
|
+
|
380
|
+
worksheet.add_chart do |chart|
|
381
|
+
chart.source = worksheet.range("A1:#{end_cell}")
|
382
|
+
block.call(chart)
|
383
|
+
end
|
384
|
+
ensure
|
385
|
+
excel.close
|
386
|
+
end
|
387
|
+
|
388
|
+
self.style("正文")
|
389
|
+
self.center
|
390
|
+
doc_work.Application.Selection.PasteAndFormat(13)
|
391
|
+
|
392
|
+
# 移动到下一行
|
393
|
+
self.move_down
|
394
|
+
self.left
|
395
|
+
end
|
396
|
+
|
397
|
+
# 插入分页符
|
398
|
+
def page_break
|
399
|
+
now.InsertBreak(7)
|
400
|
+
end
|
401
|
+
|
402
|
+
alias :style= :style
|
403
|
+
end
|
404
|
+
|
405
|
+
# 表格
|
406
|
+
class Table
|
407
|
+
def initialize(selection, row, col, obj)
|
408
|
+
@row = row
|
409
|
+
@col = col
|
410
|
+
@count = row * col
|
411
|
+
@selection = selection
|
412
|
+
@obj = obj
|
413
|
+
end
|
414
|
+
|
415
|
+
def now
|
416
|
+
@selection
|
417
|
+
end
|
418
|
+
|
419
|
+
# 合并列
|
420
|
+
def merge_row
|
421
|
+
now.SelectRow
|
422
|
+
now.Cells.Merge
|
423
|
+
@count = @count - @row + 1
|
424
|
+
end
|
425
|
+
|
426
|
+
# 放入数据
|
427
|
+
def puts(str)
|
428
|
+
now.SelectCell
|
429
|
+
now.TypeText(str)
|
430
|
+
@count -= 1
|
431
|
+
now.MoveRight(12) unless @count < 1
|
432
|
+
end
|
433
|
+
|
434
|
+
# 放入数据, 可以按数组放入
|
435
|
+
def <<(arr)
|
436
|
+
case arr
|
437
|
+
when ::String
|
438
|
+
puts(arr)
|
439
|
+
when ::Array
|
440
|
+
arr.each { |a| puts(a) }
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
# 设置行高
|
445
|
+
def height=(point)
|
446
|
+
now.Rows.Height = point
|
447
|
+
end
|
448
|
+
|
449
|
+
# 设置风格
|
450
|
+
def style=(sty)
|
451
|
+
select_all
|
452
|
+
now.Style = sty
|
453
|
+
end
|
454
|
+
|
455
|
+
# 设置列宽度
|
456
|
+
def set_columns_width(col, point)
|
457
|
+
@obj.Columns(col).SetWidth(point, 2)
|
458
|
+
end
|
459
|
+
|
460
|
+
# 移动到第一个单元格
|
461
|
+
def top
|
462
|
+
@obj.Cell(1,1).Select
|
463
|
+
end
|
464
|
+
|
465
|
+
# 居中
|
466
|
+
def center
|
467
|
+
select_all
|
468
|
+
now.ParagraphFormat.Alignment = 1
|
469
|
+
end
|
470
|
+
|
471
|
+
# 选择整个表格
|
472
|
+
def select_all
|
473
|
+
@obj.Select
|
474
|
+
end
|
475
|
+
|
476
|
+
# 网格线
|
477
|
+
def border_line
|
478
|
+
select_all
|
479
|
+
now.Borders(-1).LineStyle = 1
|
480
|
+
now.Borders(-2).LineStyle = 1
|
481
|
+
now.Borders(-3).LineStyle = 1
|
482
|
+
now.Borders(-4).LineStyle = 1
|
483
|
+
now.Borders(-5).LineStyle = 1
|
484
|
+
now.Borders(-6).LineStyle = 1
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
end
|
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: office_elin
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Elin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-07-31 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: WPS excel 和 word 控制器
|
14
|
+
email: 365433079@qq.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files:
|
18
|
+
- README.md
|
19
|
+
files:
|
20
|
+
- LICENSE.txt
|
21
|
+
- README.md
|
22
|
+
- lib/excel_office.rb
|
23
|
+
- lib/excel_wps.rb
|
24
|
+
- lib/office.rb
|
25
|
+
- lib/os.rb
|
26
|
+
- lib/string.rb
|
27
|
+
- lib/word_wps.rb
|
28
|
+
homepage: http://rubygems.org/gems/office
|
29
|
+
licenses:
|
30
|
+
- NGPL
|
31
|
+
metadata: {}
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project:
|
48
|
+
rubygems_version: 2.7.6
|
49
|
+
signing_key:
|
50
|
+
specification_version: 4
|
51
|
+
summary: WPS excel and word
|
52
|
+
test_files: []
|