robust_excel_ole 0.2.0

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.
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RobustExcelOle
4
+ class Cell
5
+ attr_reader :cell
6
+
7
+ def initialize(win32_cell)
8
+ if win32_cell.MergeCells
9
+ @cell = win32_cell.MergeArea.Item(1,1)
10
+ else
11
+ @cell = win32_cell
12
+ end
13
+ end
14
+
15
+ def method_missing(id, *args)
16
+ @cell.send(id, *args)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,40 @@
1
+ module RobustExcelOle
2
+ module Cygwin
3
+ require 'Win32API'
4
+
5
+ @conv_to_full_posix_path =
6
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_full_posix_path', 'PP', 'I')
7
+ @conv_to_posix_path =
8
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_posix_path', 'PP', 'I')
9
+ @conv_to_full_win32_path =
10
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_full_win32_path', 'PP', 'I')
11
+ @conv_to_win32_path =
12
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_win32_path', 'PP', 'I')
13
+
14
+ def cygpath(options, path)
15
+ absolute = shortname = false
16
+ func = nil
17
+ options.delete(" \t-").chars {|opt|
18
+ case opt
19
+ when ?u
20
+ func = [@conv_to_full_posix_path, @conv_to_posix_path]
21
+ when ?w
22
+ func = [@conv_to_full_win32_path, @conv_to_win32_path]
23
+ when ?a
24
+ absolute = true
25
+ when ?s
26
+ shortname = true
27
+ end
28
+ }
29
+ raise "first argument must contain -u or -w" if func.nil?
30
+ func = absolute ? func[0] : func[1]
31
+ buf = "\0" * 300
32
+ if func.Call(path, buf) == -1
33
+ raise "cannot convert path name"
34
+ end
35
+ buf.delete!("\0")
36
+ buf
37
+ end
38
+ module_function :cygpath
39
+ end
40
+ end
@@ -0,0 +1,182 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RobustExcelOle
4
+
5
+ class ExcelApp
6
+
7
+ attr_writer :ole_app
8
+
9
+ @@hwnd2app = {}
10
+
11
+ # closes one excel application
12
+ def self.close_one_app
13
+ excel = running_app
14
+ if excel then
15
+ excel.Workbooks.Close
16
+ excel_hwnd = excel.HWnd
17
+ excel.Quit
18
+ #excel.ole_free
19
+ weak_excel_ref = WeakRef.new(excel)
20
+ excel = nil
21
+ GC.start
22
+ sleep 0.2
23
+ #sleep 0.1
24
+ if weak_excel_ref.weakref_alive? then
25
+ #if WIN32OLE.ole_reference_count(weak_xlapp) > 0
26
+ begin
27
+ weak_excel_ref.ole_free
28
+ puts "successfully ole_freed #{weak_excel_ref}"
29
+ rescue
30
+ puts "could not do ole_free on #{weak_excel_ref}"
31
+ end
32
+ end
33
+
34
+ @@hwnd2app[excel_hwnd].die rescue nil
35
+ #@@hwnd2app[excel_hwnd] = nil
36
+ end
37
+
38
+
39
+ free_all_ole_objects
40
+
41
+ return
42
+ process_id = Win32API.new("user32", "GetWindowThreadProcessId", ["I","P"], "I")
43
+ pid_puffer = " " * 32
44
+ process_id.call(excel_hwnd, pid_puffer)
45
+ pid = pid_puffer.unpack("L")[0]
46
+ Process.kill("KILL", pid)
47
+ end
48
+
49
+ def self.free_all_ole_objects
50
+ anz_objekte = 0
51
+ ObjectSpace.each_object(WIN32OLE) do |o|
52
+ anz_objekte += 1
53
+ #p [:Name, (o.Name rescue (o.Count rescue "no_name"))]
54
+ #p [:ole_object_name, (o.ole_object_name rescue nil)]
55
+ #p [:methods, (o.ole_methods rescue nil)] unless (o.Name rescue false)
56
+ #puts o.ole_type rescue nil
57
+ #trc_info :obj_hwnd, o.HWnd rescue nil
58
+ #trc_info :obj_Parent, o.Parent rescue nil
59
+ begin
60
+ o.ole_free
61
+ puts "olefree OK"
62
+ rescue
63
+ puts "olefree_error: #{$!}"
64
+ #puts $!.backtrace.first(9).join "\n"
65
+ end
66
+ end
67
+ puts "went through #{anz_objekte} OLE objects"
68
+ end
69
+
70
+ # closes all excel applications
71
+ def self.close_all
72
+ while running_app do
73
+ close_one_app
74
+ GC.start
75
+ sleep 0.3
76
+ #free_all_ole_objects
77
+ end
78
+ end
79
+
80
+ # returns a running excel application, if a non-dead excel appication exists, nil otherwise
81
+ def self.running_app
82
+ result = WIN32OLE.connect('Excel.Application') rescue nil
83
+ if result
84
+ begin
85
+ result.Visible # send any method, just to see if it responds
86
+ rescue
87
+ puts "dead excel app " + ("Window-handle = #{result.HWnd}" rescue "without window handle")
88
+ return nil
89
+ end
90
+ end
91
+ result
92
+ end
93
+
94
+ # creates a new excel application
95
+ def self.create
96
+ new(:reuse => false)
97
+ end
98
+
99
+ # uses a running excel application, if such an application exists
100
+ # creates a new one, otherwise
101
+ def self.reuse_if_possible
102
+ new(:reuse => true)
103
+ end
104
+
105
+ # returns an excel application
106
+ #
107
+ # options:
108
+ # :reuse (boolean) use an already running excel application (default: true)
109
+ # :displayalerts (boolean) allow display alerts in Excel (default: false)
110
+ # :visible (boolean) make visible in Excel (default: false)
111
+ def self.new(options= {})
112
+ options = {:reuse => true}.merge(options)
113
+
114
+ ole_app = nil
115
+ if options[:reuse] then
116
+ ole_app = running_app
117
+ if ole_app
118
+ #p "bestehende Applikation wird wieder benutzt"
119
+ ole_app.DisplayAlerts = options[:displayalerts] unless options[:displayalerts]==nil
120
+ ole_app.Visible = options[:visible] unless options[:visible]==nil
121
+ end
122
+ end
123
+
124
+ options = {
125
+ :displayalerts => false,
126
+ :visible => false,
127
+ }.merge(options)
128
+ #p "kreiere neue application"
129
+ unless ole_app
130
+ ole_app = WIN32OLE.new('Excel.application')
131
+ ole_app.DisplayAlerts = options[:displayalerts]
132
+ ole_app.Visible = options[:visible]
133
+ end
134
+
135
+ hwnd = ole_app.HWnd
136
+ stored = @@hwnd2app[hwnd]
137
+
138
+ if stored
139
+ result = stored
140
+ else
141
+ WIN32OLE.const_load(ole_app, RobustExcelOle) unless RobustExcelOle.const_defined?(:CONSTANTS)
142
+ result = super(options)
143
+ result.ole_app = ole_app
144
+ @@hwnd2app[hwnd] = result
145
+ end
146
+ result
147
+ end
148
+
149
+
150
+ def initialize(options= {})
151
+ end
152
+
153
+
154
+ def hwnd_xxxx
155
+ self.HWnd #rescue Win32 nil
156
+ end
157
+
158
+ # returns true, if the excel applications are identical, false otherwise
159
+ def == other_app
160
+ self.hwnd == other_app.hwnd if other_app.is_a?(ExcelApp)
161
+ end
162
+
163
+ # set this excel application to nil
164
+ def die
165
+ @ole_app = nil
166
+ end
167
+
168
+ # returns true, if the excel application is alive, false otherwise
169
+ def alive?
170
+ @ole_app.Name
171
+ true
172
+ rescue
173
+ puts $!.message
174
+ false
175
+ end
176
+
177
+ def method_missing(name, *args)
178
+ @ole_app.send(name, *args)
179
+ end
180
+
181
+ end
182
+ end
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ module RobustExcelOle
3
+ class Range
4
+ include Enumerable
5
+
6
+ def initialize(win32_range)
7
+ @range = win32_range
8
+ end
9
+
10
+ def each
11
+ @range.each do |row_or_column|
12
+ yield RobustExcelOle::Cell.new(row_or_column)
13
+ end
14
+ end
15
+
16
+ def values(range = nil)
17
+ #+# result = self.map(&:value).flatten
18
+ result = self.map{|x| x.value}.flatten
19
+ #+# range ? result.each_with_index.select{ |row_or_column, i| range.include?(i) }.map{ |i| i[0] } : result
20
+ if range
21
+ relevant_result = []
22
+ result.each_with_index{ |row_or_column, i| relevant_result << row_or_column if range.include?(i) }
23
+ relevant_result
24
+ else
25
+ result
26
+ end
27
+ end
28
+
29
+ def [] index
30
+ @cells ||= []
31
+ @cells[index + 1] ||= RobustExcelOle::Cell.new(@range.Cells.Item(index + 1))
32
+ end
33
+
34
+ def method_missing(id, *args)
35
+ @range.send(id, *args)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ {
2
+ "folders":
3
+ [
4
+ {
5
+ "path": "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole"
6
+ }
7
+ ]
8
+ }
@@ -0,0 +1,347 @@
1
+ {
2
+ "auto_complete":
3
+ {
4
+ "selected_items":
5
+ [
6
+ [
7
+ "rub",
8
+ "rubygems"
9
+ ],
10
+ [
11
+ "module_",
12
+ "module_eval"
13
+ ],
14
+ [
15
+ "Schm",
16
+ "SchmiebaSub_TempModule"
17
+ ],
18
+ [
19
+ "schm",
20
+ "SchmiebaMain_TempModule"
21
+ ],
22
+ [
23
+ "req",
24
+ "require"
25
+ ],
26
+ [
27
+ "wrap",
28
+ "wrap_in_module"
29
+ ]
30
+ ]
31
+ },
32
+ "buffers":
33
+ [
34
+ {
35
+ "file": "book.rb",
36
+ "settings":
37
+ {
38
+ "buffer_size": 2756,
39
+ "line_ending": "Windows"
40
+ }
41
+ }
42
+ ],
43
+ "build_system": "",
44
+ "command_palette":
45
+ {
46
+ "height": 196.0,
47
+ "selected_items":
48
+ [
49
+ [
50
+ "INST",
51
+ "Package Control: Install Package"
52
+ ],
53
+ [
54
+ "pack",
55
+ "Package Control: Upgrade/Overwrite All Packages"
56
+ ],
57
+ [
58
+ "upg",
59
+ "Package Control: Upgrade/Overwrite All Packages"
60
+ ],
61
+ [
62
+ "",
63
+ "Package Control: Upgrade Package"
64
+ ],
65
+ [
66
+ "ins",
67
+ "Package Control: Install Package"
68
+ ],
69
+ [
70
+ "pa",
71
+ "Package Control: Install Package"
72
+ ]
73
+ ],
74
+ "width": 386.0
75
+ },
76
+ "console":
77
+ {
78
+ "height": 126.0
79
+ },
80
+ "distraction_free":
81
+ {
82
+ "menu_visible": true,
83
+ "show_minimap": false,
84
+ "show_open_files": false,
85
+ "show_tabs": false,
86
+ "side_bar_visible": false,
87
+ "status_bar_visible": false
88
+ },
89
+ "file_history":
90
+ [
91
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/spec/book_spec.rb",
92
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/lib/robust_excel_ole.rb",
93
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/lib/robust_excel_ole/book.rb",
94
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/ruby/einmaleins_test.rb",
95
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/spec/spec_helper.rb",
96
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/unit/wandler/wandler_hr5_test.rb",
97
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/unit/system_fkt/excel_zugriff/exlzug_ats_test.rb",
98
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/RubyTest.sublime-settings",
99
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/models/system_fkt/excel_zugriff/exlzug_basis.rb",
100
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/ruby/einmaleins_v07.rb",
101
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/unit/dbf_boxes/v_objekte/rk_test.rb",
102
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/models/dbf_boxes/v_objekte/rk.rb",
103
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/schmiedebasis_test.rb",
104
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/controllers/gui_apollo/schmiedebasis.rb",
105
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/galaxy_script/g_script/galaxy_object.rb",
106
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/Preferences.sublime-settings",
107
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/Default/Preferences.sublime-settings",
108
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/RubyTest/RubyTest.sublime-settings",
109
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/Distraction Free.sublime-settings",
110
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/JSON.sublime-settings",
111
+ "/I/gim/ats/TodoListe.txt",
112
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/RubyTest.last-run",
113
+ "/I/gim/ats/aSrc/test/testbasis.rb",
114
+ "/I/gim/ats/aSrc/test/fixture_generell.rb",
115
+ "/C/ProgLang/Ruby-1.8.6/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb",
116
+ "/I/gim/ats/aSrc/app/controllers/prozesse/diener.rb",
117
+ "/C/Dokumente und Einstellungen/sound/Lokale Einstellungen/Temp/tar2rubyscript.d.3800.1/tsExpo/app/controllers/prozesse/diener.rb",
118
+ "/I/gim/ats/aSrc/app/controllers/ats_konsole.rb",
119
+ "/I/gim/ats/aSrc/test/controllers/prozesse/dienstherr_test.rb",
120
+ "/I/gim/ats/aSrc/lib/controllers/prozesse/dienstherr.rb",
121
+ "/I/gim/ats/aSrc/lib/schmiedebasis.rb",
122
+ "/C/ProgLang/Ruby-1.8.6/lib/ruby/gems/1.8/gems/autotest-standalone-4.5.11/lib/autotest/notify.rb",
123
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Installed Packages/RubyTest.sublime-package",
124
+ "/I/gim/ats/aSrc/app/.loadpath",
125
+ "/I/gim/ats/aSrc/app/iconv.rb",
126
+ "/I/gim/ats/aSrc/app/init_x.rb",
127
+ "/I/gim/ats/aSrc/app/schmiedebasis.rb",
128
+ "/I/gim/ats/aSrc/app/temp_app.rb",
129
+ "/I/gim/ats/aSrc/app/testhilfe.rb",
130
+ "/I/gim/ats/aSrc/app/version.rb",
131
+ "/I/gim/ats/aSrc/app/models/wandler/dbf2exl.rb",
132
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung.rb",
133
+ "/I/gim/ats/aSrc/app/models/wandler/satz_split.rb",
134
+ "/I/gim/ats/aSrc/app/models/wandler/wandler_allgemein.rb",
135
+ "/I/gim/ats/aSrc/app/models/wandler/wandler_hr5.rb",
136
+ "/I/gim/ats/aSrc/app/models/wandler/wandler_zu_excel.rb",
137
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung/zuord_hr5.rb",
138
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung/zuord_hr6.rb",
139
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung/zuord_ng1.rb",
140
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/eintrag_persistenz.rb",
141
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/haupt_konfig_hash.rb",
142
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/inifile_hash.rb",
143
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/konfig_option.rb",
144
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/konfig_optionen.rb",
145
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/konfig_opts.rb",
146
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/ort_persistenz.rb",
147
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/schmiedebasis.rb",
148
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/vergleichs_ergebnis.rb",
149
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff/exlzug_ats.rb",
150
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff/exlzug_basis.rb",
151
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff/exlzug_openclose.rb",
152
+ "/I/gim/ats/aSrc/app/models/system_fkt/datei_aufraeumer.rb",
153
+ "/I/gim/ats/aSrc/app/models/system_fkt/dbase_zugriff.rb",
154
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_prozesse.rb",
155
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff.rb",
156
+ "/I/gim/ats/aSrc/app/models/system_fkt/protokollierer.rb",
157
+ "/I/gim/ats/aSrc/app/models/system_fkt/schmiedebasis.rb",
158
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung.rb",
159
+ "/I/gim/ats/aSrc/app/models/system_fkt/tasten_sender.rb",
160
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekt.rb",
161
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte.rb",
162
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/va.rb",
163
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vb.rb",
164
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vd.rb",
165
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vk.rb",
166
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vt.rb",
167
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/rk.rb",
168
+ "/I/gim/ats/aSrc/app/models/basis_logik/zeit.rb",
169
+ "/I/gim/ats/aSrc/app/controllers/teste_tv2_a03.rb",
170
+ "/I/gim/ats/aSrc/app/controllers/teste_tv2.rb",
171
+ "/I/gim/ats/aSrc/app/controllers/schmiedebasis.rb",
172
+ "/I/gim/ats/aSrc/app/controllers/orte_controller.rb",
173
+ "/I/gim/ats/aSrc/app/controllers/mathstar_per_tasten.rb",
174
+ "/I/gim/ats/aSrc/app/controllers/mathstar_per_dll.rb",
175
+ "/I/gim/ats/aSrc/app/controllers/iterator.rb",
176
+ "/I/gim/ats/aSrc/app/controllers/galaxy_script.rb",
177
+ "/I/gim/ats/aSrc/app/controllers/dbf_vergleicher.rb",
178
+ "/I/gim/ats/aSrc/app/controllers/controller.rb",
179
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/gui_ap.rb",
180
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/gui_basis_ap.rb",
181
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/guikonfig_ap.rb",
182
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/guivertr_ap.rb",
183
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/schmiedebasis.rb",
184
+ "/I/gim/ats/aSrc/app/controllers/prozesse/aufgaben.rb",
185
+ "/I/gim/ats/aSrc/app/controllers/prozesse/dienstherr.rb",
186
+ "/I/gim/ats/aSrc/app/controllers/prozesse/dienstkontakt.rb",
187
+ "/I/gim/ats/aSrc/app/controllers/prozesse/schmiedebasis.rb",
188
+ "/I/gim/ats/aSrc/app/controllers/teste_tv2_prober2.rb",
189
+ "/C/ProgLang/Ruby-1.8.6/lib/ruby/gems/1.8/gems/wrap_in_module-0.1.0/lib/wrap_in_module.rb",
190
+ "/I/gim/ats/aSrc/app/oldandnewlocation.rb",
191
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/monkeypatch_dbf_gem.rb",
192
+ "/I/gim/ats/aSrc/test/schmiedebasis_test.rb",
193
+ "/I/gim/ats/aSrc/test/unit/ort_haupt_test.rb",
194
+ "/I/gim/ats/aSrc/app/models/ort_exlist.rb",
195
+ "/I/gim/ats/aSrc/app/models/ort_haupt.rb",
196
+ "/I/gim/ats/aSrc/app/models/orte.rb",
197
+ "/I/gim/ats/aSrc/app/models/schmiedebasis.rb",
198
+ "/I/gim/ats/aSrc/app/models/ort_excel.rb",
199
+ "/I/gim/ats/aSrc/app/models/dbf_boxes.rb",
200
+ "/I/gim/ats/aSrc/app/models/generali.rb",
201
+ "/I/gim/ats/aSrc/init.rb",
202
+ "/I/gim/ats/rakefile.rb"
203
+ ],
204
+ "find":
205
+ {
206
+ "height": 27.0
207
+ },
208
+ "find_in_files":
209
+ {
210
+ "height": 0.0,
211
+ "where_history":
212
+ [
213
+ "C:\\D,C:\\Dokumente und Einstellungen\\Zauberthomas\\Eigene Dateien\\aSrc\\app"
214
+ ]
215
+ },
216
+ "find_state":
217
+ {
218
+ "case_sensitive": false,
219
+ "find_history":
220
+ [
221
+ "&",
222
+ "&:",
223
+ "ExcelApplicationHelfer",
224
+ "flex",
225
+ "flexm",
226
+ "SchmiebaSub_TempModule",
227
+ "SchmiebaMain_TempModule"
228
+ ],
229
+ "highlight": true,
230
+ "in_selection": false,
231
+ "preserve_case": false,
232
+ "regex": false,
233
+ "replace_history":
234
+ [
235
+ "SB_Sub_TempModule",
236
+ "SB_Main_TempModule"
237
+ ],
238
+ "reverse": false,
239
+ "show_context": true,
240
+ "use_buffer2": true,
241
+ "whole_word": false,
242
+ "wrap": true
243
+ },
244
+ "groups":
245
+ [
246
+ {
247
+ "selected": 0,
248
+ "sheets":
249
+ [
250
+ {
251
+ "buffer": 0,
252
+ "file": "book.rb",
253
+ "settings":
254
+ {
255
+ "buffer_size": 2756,
256
+ "regions":
257
+ {
258
+ },
259
+ "selection":
260
+ [
261
+ [
262
+ 0,
263
+ 0
264
+ ]
265
+ ],
266
+ "settings":
267
+ {
268
+ "syntax": "Packages/Ruby/Ruby.tmLanguage",
269
+ "tab_size": 2,
270
+ "translate_tabs_to_spaces": true
271
+ },
272
+ "translation.x": 0.0,
273
+ "translation.y": 0.0,
274
+ "zoom_level": 1.0
275
+ },
276
+ "type": "text"
277
+ }
278
+ ]
279
+ }
280
+ ],
281
+ "incremental_find":
282
+ {
283
+ "height": 27.0
284
+ },
285
+ "input":
286
+ {
287
+ "height": 37.0
288
+ },
289
+ "layout":
290
+ {
291
+ "cells":
292
+ [
293
+ [
294
+ 0,
295
+ 0,
296
+ 1,
297
+ 1
298
+ ]
299
+ ],
300
+ "cols":
301
+ [
302
+ 0.0,
303
+ 1.0
304
+ ],
305
+ "rows":
306
+ [
307
+ 0.0,
308
+ 1.0
309
+ ]
310
+ },
311
+ "menu_visible": true,
312
+ "output.exec":
313
+ {
314
+ "height": 301.0
315
+ },
316
+ "output.find_results":
317
+ {
318
+ "height": 0.0
319
+ },
320
+ "replace":
321
+ {
322
+ "height": 50.0
323
+ },
324
+ "save_all_on_build": true,
325
+ "select_file":
326
+ {
327
+ "height": 0.0,
328
+ "selected_items":
329
+ [
330
+ ],
331
+ "width": 0.0
332
+ },
333
+ "select_project":
334
+ {
335
+ "height": 0.0,
336
+ "selected_items":
337
+ [
338
+ ],
339
+ "width": 0.0
340
+ },
341
+ "show_minimap": true,
342
+ "show_open_files": false,
343
+ "show_tabs": true,
344
+ "side_bar_visible": true,
345
+ "side_bar_width": 132.0,
346
+ "status_bar_visible": true
347
+ }