-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2016-05-31-python-excel.html
319 lines (224 loc) · 41.4 KB
/
2016-05-31-python-excel.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Python调用dll动态链接库操作excel | Hm's Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="这是一篇Python调用动态链接库的标准示范。
原理其实不管什么语言调用dll的流程都是一样的:先注册dll到操作系统,然后获取到初始化的dll对象,然后就可以调用dll的各种api接口了。
1234567891011121314151617def register(): '''注册插件 ''' pythoncom.CoInitialize() command = "reg">
<meta property="og:type" content="article">
<meta property="og:title" content="Python调用dll动态链接库操作excel">
<meta property="og:url" content="http://huangming.github.io/2016-05-31-python-excel.html">
<meta property="og:site_name" content="Hm's Blog">
<meta property="og:description" content="这是一篇Python调用动态链接库的标准示范。
原理其实不管什么语言调用dll的流程都是一样的:先注册dll到操作系统,然后获取到初始化的dll对象,然后就可以调用dll的各种api接口了。
1234567891011121314151617def register(): '''注册插件 ''' pythoncom.CoInitialize() command = "reg">
<meta property="og:updated_time" content="2016-08-07T05:58:39.494Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Python调用dll动态链接库操作excel">
<meta name="twitter:description" content="这是一篇Python调用动态链接库的标准示范。
原理其实不管什么语言调用dll的流程都是一样的:先注册dll到操作系统,然后获取到初始化的dll对象,然后就可以调用dll的各种api接口了。
1234567891011121314151617def register(): '''注册插件 ''' pythoncom.CoInitialize() command = "reg">
<meta name="twitter:creator" content="@hmorz">
<link rel="alternative" href="/atom.xml" title="Hm's Blog" type="application/atom+xml">
<link rel="icon" href="/favicon.png">
<!-- <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css"> -->
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link href="/css/font-quigleywiggly.css" rel="Stylesheet" type="text/css" />
<link rel="stylesheet" href="/css/style.css" type="text/css">
<script src="/js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="/js/girls.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8" src="/js/weather.js"></script>
<link href="http://huangming.github.io/stylesheets/main.css" rel="stylesheet" media="all"/>
<link href="http://huangming.github.io/images/weather/default/julying-weather.css" rel="stylesheet" media="all"/>
<!--
-->
</head>
<body>
<div id="container">
<div id="wrap">
<header id="header">
<div id="banner"></div>
<div id="header-outer" class="outer">
<div id="header-title" class="inner">
<h1 id="logo-wrap">
<a href="/" id="logo">Hm's Blog</a>
</h1>
<h2 id="subtitle-wrap">
<a href="/" id="subtitle">I am here</a>
</h2>
</div>
<div id="header-inner" class="inner">
<nav id="main-nav">
<a id="main-nav-toggle" class="nav-icon"></a>
<a class="main-nav-link" href="/">Home</a>
<a class="main-nav-link" href="/archives">Archives</a>
<a class="main-nav-link" href="/vimwiki">Wiki</a>
</nav>
<nav id="sub-nav">
<a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
<a id="nav-search-btn" class="nav-icon" title="Search"></a>
<div id="search-form-wrap">
<form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" results="0" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit"></button><input type="hidden" name="sitesearch" value="http://huangming.github.io"></form>
</div>
</nav>
</div>
</div>
</header>
<div class="outer">
<section id="main"><article id="post-python-excel" class="article article-type-post" itemscope itemprop="blogPost">
<!-- <div class="article-meta"> -->
<!-- <a href="/2016-05-31-python-excel.html" class="article-date">
<time datetime="2016-05-31T14:56:05.000Z" itemprop="datePublished">2016-05-31</time>
</a> -->
<!--
<div class="article-category">
<a class="article-category-link" href="/categories/python/">python</a>
</div>
-->
<!-- </div> -->
<div class="article-inner">
<header class="article-header">
<h1 class="article-title" itemprop="name">
Python调用dll动态链接库操作excel
</h1>
<div class="article-meta">
<a href="/2016-05-31-python-excel.html" class="article-date">
<time datetime="2016-05-31T14:56:05.000Z" itemprop="datePublished">2016-05-31</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/python/">python</a>
</div>
</div>
</header>
<div class="article-entry" itemprop="articleBody">
<p>这是一篇Python调用动态链接库的标准示范。</p>
<h2 id="原理">原理</h2><p>其实不管什么语言调用dll的流程都是一样的:先注册dll到操作系统,然后获取到初始化的dll对象,然后就可以调用dll的各种api接口了。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">register</span><span class="params">()</span>:</span></span><br><span class="line"> <span class="string">'''注册插件</span><br><span class="line"> '''</span></span><br><span class="line"> pythoncom.CoInitialize()</span><br><span class="line"> command = <span class="string">"regsvr32 /s atl.dll"</span></span><br><span class="line"> os.system(command)</span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> lx = win32com.client.Dispatch(<span class="string">'Lazy.LxjExcel'</span>)</span><br><span class="line"> <span class="keyword">except</span> pywintypes.com_error:</span><br><span class="line"> command = <span class="string">'regsvr32 /s LazyOffice.dll'</span></span><br><span class="line"> <span class="keyword">if</span> os.system(command) == <span class="number">0</span>:</span><br><span class="line"> lx = win32com.client.Dispatch(<span class="string">'Lazy.LxjExcel'</span>)</span><br><span class="line"> <span class="keyword">return</span> lx</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.log.error(<span class="string">'regsver32 error'</span>)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> lx</span><br></pre></td></tr></table></figure>
<p>这段代码是python调用dll的标准代码。别的dll也可以用这个调用。其中<code>LazyOffice.dll</code>是操作excel的dll文件,<code>Lazy.LxjExcel</code>是初始化的操作excel的对象,该对象由dll的编写作者提供。</p>
<p>然后就能通过返回的lx调用这个dll内部封装的接口啦:<code>lx.ExcelOpen(path, visual)</code></p>
<a id="more"></a>
<h2 id="封装">封装</h2><p>环境:<code>win7</code> <code>python3</code> <code>python2</code>,如果操作系统注册dll插件失败,可先手动注册成功后再运行程序调用。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/env python</span></span><br><span class="line"><span class="comment"># -*- coding: utf-8 -*-</span></span><br><span class="line"><span class="comment"># Last Update:</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> win32com.client</span><br><span class="line"><span class="keyword">import</span> pywintypes</span><br><span class="line"><span class="keyword">import</span> pythoncom</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">GoodString</span><span class="params">(value)</span>:</span></span><br><span class="line"> <span class="string">"""</span><br><span class="line"> >>> GoodString(2)</span><br><span class="line"> '2'</span><br><span class="line"> """</span></span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> <span class="keyword">return</span> str(value)</span><br><span class="line"> <span class="keyword">except</span> UnicodeEncodeError:</span><br><span class="line"> <span class="keyword">return</span> value</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Lxsoft</span><span class="params">()</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span><span class="params">(self, log, path=<span class="string">''</span>)</span>:</span></span><br><span class="line"> self.log = log</span><br><span class="line"> self.lx = self.__registerLxsoft()</span><br><span class="line"> self.InitExcel()</span><br><span class="line"> <span class="keyword">if</span> path:</span><br><span class="line"> self.Open(path)</span><br><span class="line"> self.SheetIndex()</span><br><span class="line"> self.SheetCount()</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__registerLxsoft</span><span class="params">(self)</span>:</span></span><br><span class="line"> <span class="string">'''注册插件</span><br><span class="line"> '''</span></span><br><span class="line"> pythoncom.CoInitialize()</span><br><span class="line"> command = <span class="string">"regsvr32 /s atl.dll"</span></span><br><span class="line"> os.system(command)</span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> lx = win32com.client.Dispatch(<span class="string">'Lazy.LxjExcel'</span>)</span><br><span class="line"> <span class="keyword">except</span> pywintypes.com_error:</span><br><span class="line"> command = <span class="string">'regsvr32 /s LazyOffice.dll'</span></span><br><span class="line"> <span class="keyword">if</span> os.system(command) == <span class="number">0</span>:</span><br><span class="line"> lx = win32com.client.Dispatch(<span class="string">'Lazy.LxjExcel'</span>)</span><br><span class="line"> <span class="comment"># assert(dm.Ver == '2.1138')</span></span><br><span class="line"> <span class="keyword">return</span> lx</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.log.error(<span class="string">'regsver32 error'</span>)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> lx</span><br><span class="line"> </span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">InitExcel</span><span class="params">(self)</span>:</span></span><br><span class="line"> self.path = <span class="string">''</span></span><br><span class="line"> self.maxsheet = <span class="number">1</span></span><br><span class="line"> self.index = <span class="number">1</span></span><br><span class="line"> self.sindex = <span class="number">1</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__del__</span><span class="params">(self)</span>:</span></span><br><span class="line"> self.Close()</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__Trueindex</span><span class="params">(self, index)</span>:</span></span><br><span class="line"> <span class="keyword">if</span> index == <span class="string">''</span>:</span><br><span class="line"> <span class="keyword">return</span> self.index</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> index</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Open</span><span class="params">(self, path, visual=<span class="number">0</span>)</span>:</span></span><br><span class="line"> <span class="comment"># visual:1可见,0不可见 opencd:打开密码(如果存在)</span></span><br><span class="line"> <span class="comment"># writecd:写入密码 flag:只读方式打开</span></span><br><span class="line"> self.path = path</span><br><span class="line"> self.index = self.lx.ExcelOpen(path, visual)</span><br><span class="line"> <span class="keyword">return</span> self.index</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Close</span><span class="params">(self, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> <span class="keyword">return</span> self.lx.ExcelClose(index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">SheetIndex</span><span class="params">(self, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 获取当前标签页序号</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.sindex = self.lx.SheetIndex(index)</span><br><span class="line"> <span class="keyword">return</span> self.sindex</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">SheetName</span><span class="params">(self, Sindex, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 获取标签页序号(或名称)为Sindex的标签名称(或索引)</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> <span class="keyword">return</span> self.lx.SheetGetName(Sindex, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">SheetCount</span><span class="params">(self, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 获取标签页总数</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.maxsheet = self.lx.SheetCount(index)</span><br><span class="line"> <span class="keyword">return</span> self.maxsheet</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">SheetAdd</span><span class="params">(self, Sindex, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 在第Sindex个标签页之前新建一个标签</span></span><br><span class="line"> <span class="comment"># 如果Sindex是字符串,则在最后新建一个名叫Sindex的标签</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.log.debug(<span class="string">u'新建标签: '</span>+GoodString(Sindex))</span><br><span class="line"> <span class="keyword">return</span> self.lx.SheetAdd(Sindex, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">SheetRename</span><span class="params">(self, Sindex, name, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># Sindex可为序号或者名称</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> <span class="keyword">return</span> self.lx.SheetRename(Sindex, name, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">SheetDel</span><span class="params">(self, Sindex, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.log.debug(<span class="string">u'删除标签: '</span>+GoodString(Sindex))</span><br><span class="line"> <span class="keyword">return</span> self.lx.SheetDel(Sindex, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Write</span><span class="params">(self, Sindex, x, y, string, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># Write(1,3,2,"内容",Index)向单元格(3,2)即'B3'写入内容</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.log.debug(<span class="string">u'向单元格(%s,%s)写入内容: %s'</span> % (GoodString(x),GoodString(y),GoodString(string)))</span><br><span class="line"> <span class="keyword">return</span> self.lx.ExcelWrite(Sindex, x, y, string, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Read</span><span class="params">(self, Sindex, x, y, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> string = self.lx.ExcelRead(Sindex, x, y, index)[<span class="number">0</span>]</span><br><span class="line"> self.log.debug(<span class="string">u'读取单元格(%s,%s): %s'</span> % (GoodString(x),GoodString(y),GoodString(string)))</span><br><span class="line"> <span class="keyword">return</span> string</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">differ</span><span class="params">(self, Sindex, x1, y1, x2, y2, index1=<span class="string">''</span>, index2=<span class="string">''</span>)</span>:</span></span><br><span class="line"> index1 = self.__Trueindex(index1)</span><br><span class="line"> index2 = self.__Trueindex(index2)</span><br><span class="line"> <span class="keyword">return</span> int(self.Read(Sindex, x1, y1, index1)) - int(self.Read(Sindex, x2, y2, index2))</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Cells</span><span class="params">(self, tab1, action, tab2, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 如设置tab2为负数,将只进行复制</span></span><br><span class="line"> <span class="comment"># 如设置tab2为0,将在所有标签页后面新建一个被复制的表</span></span><br><span class="line"> <span class="comment"># 将工作表第1个标签页整表复制到第3个标签页:self.lx.ExcelCells(1, u"复制", 3, Index)</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.log.debug(<span class="string">u'表%s %s -> %s'</span> % (GoodString(tab1),action,GoodString(tab2)))</span><br><span class="line"> <span class="keyword">return</span> self.lx.ExcelCells(tab1, action, tab2, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Rows</span><span class="params">(self, tab, row1, action, row2, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 如设置row2为负数,将只进行复制</span></span><br><span class="line"> <span class="comment"># 复制第1个标签页第2行到第8行:self.lx.ExcelRows(1, 2, u"复制", 8, Index)</span></span><br><span class="line"> <span class="comment"># 第2行模糊查找1:self.lx.ExcelRows(1, 2, u"模糊查找", 1, Index)</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.log.debug(<span class="string">u'行%s %s -> %s'</span> % (GoodString(row1),action,GoodString(row2)))</span><br><span class="line"> <span class="keyword">return</span> self.lx.ExcelRows(tab, row1, action, row2, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Columns</span><span class="params">(self, tab, col1, action, col2, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 如设置col2为负数,将只进行复制</span></span><br><span class="line"> <span class="comment"># 复制第1个标签页第3列到第6列:self.lx.ExcelColumns(1, 3, u"复制", 6, Index)</span></span><br><span class="line"> <span class="comment"># 第3列模糊查找1:self.lx.ExcelColumns(1,3, u"模糊查找", 1, Index)</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.log.debug(<span class="string">u'列%s %s -> %s'</span> % (GoodString(col1),action,GoodString(col2)))</span><br><span class="line"> <span class="keyword">return</span> self.lx.ExcelColumns(tab, col1, action, col2, index)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Range</span><span class="params">(self, tab, ranges, action, destination, index=<span class="string">''</span>)</span>:</span></span><br><span class="line"> <span class="comment"># 如设置destination为负数,将只进行复制</span></span><br><span class="line"> <span class="comment"># 复制第1个标签页"B2:C5"区域:self.lx.ExcelRange(1, "B2:C5", "复制", -1, Index)</span></span><br><span class="line"> <span class="comment"># 区域C2:E5模糊查找1:self.lx.ExcelRange(1, "C2:E5",u"模糊查找", 1, Index)</span></span><br><span class="line"> index = self.__Trueindex(index)</span><br><span class="line"> self.log.debug(<span class="string">u'区域%s %s -> %s'</span> % (GoodString(tab),action,GoodString(destination)))</span><br><span class="line"> <span class="keyword">return</span> self.lx.ExcelRange(tab, ranges, action, destination, index)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> <span class="keyword">import</span> log</span><br><span class="line"> <span class="keyword">import</span> time</span><br><span class="line"> path = <span class="string">'F:\\test.xls'</span></span><br><span class="line"> mylog = log.Log()</span><br><span class="line"> lx = Lxsoft(mylog, path)</span><br><span class="line"> <span class="comment"># print int(lx.Read(lx.SheetCount(), 5, 7))==int(time.strftime("%Y%m%d"))</span></span><br><span class="line"> <span class="comment"># a = lx.Read(lx.maxsheet, 5, 7)</span></span><br><span class="line"> a = lx.SheetCount()</span><br><span class="line"> print(lx.Columns(a, <span class="number">7</span>, <span class="string">u"模糊查找"</span>, <span class="string">"20150722"</span>)[<span class="number">0</span>][<span class="number">0</span>])</span><br><span class="line"> <span class="comment"># lx.Cells(lx.SheetCount(), 5, u"字体颜色", 3)</span></span><br><span class="line"> <span class="comment"># print lx.differ(lx.maxsheet, 17, 7, 17, 3)</span></span><br><span class="line"> <span class="comment"># print a</span></span><br><span class="line"> <span class="comment"># lx.Write(lx.maxsheet, 5, 7, "20150709")</span></span><br><span class="line"> <span class="comment"># lx.Cells(80, u"复制", 0, index)</span></span><br><span class="line"> lx.Close()</span><br><span class="line"> <span class="comment"># lx = Lxsoft(config.log)</span></span><br><span class="line"> <span class="comment"># index = lx.Open(path, 0)</span></span><br><span class="line"> <span class="comment"># lx.Close(index)</span></span><br></pre></td></tr></table></figure>
<h2 id="其他">其他</h2><ul>
<li><p><a href="http://huangming.work/2016-05-29-python-log.html" target="_blank" rel="external">log模块</a></p>
</li>
<li><p><a href="https://github.com/huangming/python_dll_excel/blob/master/%E6%87%92%E4%BA%BA%E5%8A%9E%E5%85%AC%E6%8F%92%E4%BB%B6%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3.CHM" target="_blank" rel="external">动态链接库接口文档</a></p>
</li>
<li><p><a href="https://github.com/huangming/python_dll_excel" target="_blank" rel="external">GithubRepository</a></p>
</li>
</ul>
</div>
<footer class="article-footer">
<!-- <a data-url="http://huangming.github.io/2016-05-31-python-excel.html" data-id="cixmol31e001dewfu9lx3k3sc" class="article-share-link">Share</a> -->
<nav id="article-nav">
<a href="/2016-06-25-ssh-upload-dir-to-linux-vps-by-scp.html" id="article-nav-newer" class="article-nav-link-wrap">
<!-- <strong class="article-nav-caption">Newer</strong> -->
<div class="article-nav-title">
«SSH通过SCP命令上传文件夹到linux系统的vps
</div>
</a>
<a href="/2016-05-29-python-log.html" id="article-nav-older" class="article-nav-link-wrap">
<!-- <strong class="article-nav-caption">Older</strong> -->
<div class="article-nav-title">Python logging 模块封装»</div>
</a>
</nav>
<a href="http://huangming.github.io/2016-05-31-python-excel.html#disqus_thread" class="article-comment-link">Comments</a>
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/excel/">excel</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/python/">python</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/动态链接库/">动态链接库</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/自动化/">自动化</a></li></ul>
</footer>
</div>
</article>
<section id="comments">
<div id="disqus_thread">
<noscript>Please enable JavaScript to view the <a href="//disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</div>
</section>
</section>
</div>
<footer id="footer">
<aside id="sidebar" class="outer">
<div class="widget-wrap">
<h3 class="widget-title">Categories</h3>
<div class="widget">
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Vim/">Vim</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/blog/">blog</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/database/">database</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/diary/">diary</a><span class="category-list-count">33</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/other/">other</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/python/">python</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/vps/">vps</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/www/">www</a><span class="category-list-count">1</span></li></ul>
</div>
</div>
<div class="widget-wrap">
<h3 class="widget-title">Tags</h3>
<div class="widget">
<ul class="tag-list"><li class="tag-list-item"><a class="tag-list-link" href="/tags/backup/">backup</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/dokuwiki/">dokuwiki</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/excel/">excel</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/expdp/">expdp</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/hexo/">hexo</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/impdp/">impdp</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/linux/">linux</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/log/">log</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/markdown/">markdown</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/nginx/">nginx</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/oracle/">oracle</a><span class="tag-list-count">4</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/oracle热备/">oracle热备</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/python/">python</a><span class="tag-list-count">3</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/ssh/">ssh</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/vps/">vps</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/wiki/">wiki</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/云笔记/">云笔记</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/动态链接库/">动态链接库</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/正则/">正则</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/爬虫/">爬虫</a><span class="tag-list-count">1</span></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/自动化/">自动化</a><span class="tag-list-count">1</span></li></ul>
</div>
</div>
<div class="widget-wrap">
<h3 class="widget-title">Tag Cloud</h3>
<div class="widget tagcloud">
<a href="/tags/backup/" style="font-size: 10px;">backup</a> <a href="/tags/dokuwiki/" style="font-size: 10px;">dokuwiki</a> <a href="/tags/excel/" style="font-size: 10px;">excel</a> <a href="/tags/expdp/" style="font-size: 10px;">expdp</a> <a href="/tags/hexo/" style="font-size: 10px;">hexo</a> <a href="/tags/impdp/" style="font-size: 10px;">impdp</a> <a href="/tags/linux/" style="font-size: 10px;">linux</a> <a href="/tags/log/" style="font-size: 10px;">log</a> <a href="/tags/markdown/" style="font-size: 10px;">markdown</a> <a href="/tags/nginx/" style="font-size: 10px;">nginx</a> <a href="/tags/oracle/" style="font-size: 20px;">oracle</a> <a href="/tags/oracle热备/" style="font-size: 10px;">oracle热备</a> <a href="/tags/python/" style="font-size: 15px;">python</a> <a href="/tags/ssh/" style="font-size: 10px;">ssh</a> <a href="/tags/vps/" style="font-size: 10px;">vps</a> <a href="/tags/wiki/" style="font-size: 10px;">wiki</a> <a href="/tags/云笔记/" style="font-size: 10px;">云笔记</a> <a href="/tags/动态链接库/" style="font-size: 10px;">动态链接库</a> <a href="/tags/正则/" style="font-size: 10px;">正则</a> <a href="/tags/爬虫/" style="font-size: 10px;">爬虫</a> <a href="/tags/自动化/" style="font-size: 10px;">自动化</a>
</div>
</div>
<div class="widget-wrap">
<h3 class="widget-title">Recents</h3>
<div class="widget">
<ul>
<li>
<a href="/2016-12-27-oracle-ora00020.html">Oracle无法登陆:ORA-00020</a>
</li>
<li>
<a href="/2016-12-17-dokuwiki-nginx.html">Windows下用Nginx部署DokuWiki</a>
</li>
<li>
<a href="/2016-12-03-cloud-notes-2012.html">无意翻到当年的云笔记</a>
</li>
<li>
<a href="/2016-08-18-oracle-auto-backup-and-restore.html">oracle自动备份同步</a>
</li>
<li>
<a href="/2016-08-06-python-zhengze-pachong-qiubai.html">Python爬虫正则表达式抓取糗百笑话</a>
</li>
</ul>
</div>
</div>
</aside>
<div class="outer">
<div id="footer-info" class="inner">
© 2017 Mingo<br>
Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
</div>
</div>
</footer>
</div>
<nav id="mobile-nav">
<a href="/" class="mobile-nav-link">Home</a>
<a href="/archives" class="mobile-nav-link">Archives</a>
<a href="/vimwiki" class="mobile-nav-link">Wiki</a>
</nav>
<script>
var disqus_shortname = 'huangming';
var disqus_url = 'http://huangming.github.io/2016-05-31-python-excel.html';
var disqus_config = function () {
this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = '//'+disqus_shortname + '.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> -->
<script src="/js/script.js" type="text/javascript"></script>
<script type="text/javascript">
var myDate = new Date()
var m = myDate.getMinutes()
m = m % 10
document.body.style.background = '#333 url("/css/images/bgr'+m+'.jpg") top left'
document.getElementById('wrap').style.background='#333 url("/css/images/bgr'+m+'.jpg") top left'
</script>
</div>
<div id="spig" class="spig">
<div id="message">正在加载中……</div>
<div id="mumu" class="mumu"></div>
</div>
</body>
</html>