Pywin32操作Excel数据的类

练习Pywin32操作Excel数据。学习https://blog.csdn.net/qdx411324962/article/details/44270455这篇博客后编写的内容。编写完成后进行测试,发现其速度远低于VBA。

  1 # -*- coding: utf-8 -*-
  2
  3
  4 import os
  5 import time
  6 import win32com.client
  7 from requests_html import HTMLSession
  8
  9
 10 def get_path(file_name=‘‘):
 11     ‘‘‘获取当前程序运行目录‘‘‘
 12     if file_name:
 13         file_name = file_name.strip()
 14     if file_name:
 15         main_file_dir = __file__
 16         main_file_dir_split = main_file_dir.split(‘\\‘, -1)
 17         main_file_name = main_file_dir_split[-1]
 18         main_file_path = main_file_dir.rstrip(main_file_name)
 19         return main_file_path + file_name
 20
 21
 22 def get_web_page_elements(url=‘‘, xpath_expression=‘‘):
 23     ‘‘‘获取 网页中 xpath表达式匹配的内容‘‘‘
 24     web_page_session = HTMLSession()
 25     web_page_request = web_page_session.get(url)
 26     elements = web_page_request.html.xpath(xpath_expression)
 27     return elements
 28
 29
 30 class PyExcel(object):
 31     ‘‘‘处理 Excel 的类‘‘‘
 32     __file_name = ‘‘  # 定义 文件名
 33     __excel = None  # 定义 Excel
 34     __work_book = None  # 定义 工作表
 35     __exists = False    # 定义 是否存在
 36
 37     def __init__(self):
 38         ‘‘‘PyExcel 对象 初始化‘‘‘
 39         self.__work_book = None
 40         self.__file_name = ‘‘
 41         self.__excel = win32com.client.DispatchEx(‘Excel.Application‘)  # 也可以用 Dispatch。DispatchEx 开启新进程,Dispatch 会复用进程中的 Excel 进程
 42         self.__excel.Visible = 1    # 后台运行,不显示
 43         # self.__excel.DispalyAlerts = 0  # 不发出警告
 44
 45     def open(self, file_name=‘‘):
 46         ‘‘‘
 47         打开 Excel文件\n\r
 48         file_name 为绝对路径,否则出错。
 49         ‘‘‘
 50         if getattr(self, ‘__work_book‘, False):
 51             self.__work_book.Close()
 52         self.__file_name = get_path(file_name) or ‘‘
 53         self.__exists = os.path.isfile(self.__file_name)
 54         if not self.__file_name or not self.__exists:
 55             self.__work_book = self.__excel.Workbooks.Add()
 56         else:
 57             self.__work_book = self.__excel.Workbooks.Open(self.__file_name)
 58
 59     def reset(self):
 60         ‘‘‘复位‘‘‘
 61         self.__work_book = None
 62         self.__file_name = ‘‘
 63         self.__excel = None
 64         self.__exists = False
 65
 66     def save(self, newfile=‘‘):
 67         ‘‘‘save the excel content‘‘‘
 68         assert type(newfile) is str, ‘filename must be type string‘
 69         newfile = get_path(newfile) or self.__file_name
 70         if not newfile or (self.__exists and newfile == self.__file_name):
 71             self.__work_book.Save()
 72             return
 73         pathname = os.path.dirname(newfile)
 74         if not os.path.isdir(pathname):
 75             os.makedirs(pathname)
 76         self.__file_name = newfile
 77         self.__work_book.SaveAs(newfile)
 78
 79     def close(self, save_changes):
 80         ‘‘‘关闭应用‘‘‘
 81         self.__work_book.Close(SaveChanges=save_changes)
 82         self.__excel.Quit()
 83         time.sleep(2)
 84         self.reset()
 85
 86     def add_sheet(self, sheet_name=None):
 87         ‘‘‘添加新页,页名可以自定义‘‘‘
 88         sheet = self.__work_book.WorkSheets.Add()
 89         sheet.Name = sheet_name if sheet_name else sheet.Name
 90         return sheet
 91
 92     def get_sheet_by_index(self, sheet_index=1):
 93         ‘‘‘通过页索引获取页对象‘‘‘
 94         assert sheet_index > 0, ‘页索引必须大于0‘
 95         return self.__work_book.Sheets(sheet_index)
 96
 97     def get_sheet_by_name(self, sheet_name=‘‘):
 98         ‘‘‘通过页名称获取页对象‘‘‘
 99         for each_worksheet in self.__work_book.WorkSheets:
100             if each_worksheet.Name == sheet_name:
101                 return each_worksheet
102         return None
103
104     def get_cell(self, sheet_index=1, row=1, column=1):
105         ‘‘‘获取 Cell 对象‘‘‘
106         assert row > 0 and column > 0, ‘行索引 和 列索引 必须大于0‘
107         return self.get_sheet_by_index(sheet_index).Cells(row, column)
108
109     def get_row(self, sheet_index=1, row=1):
110         ‘‘‘获取 Row 对象‘‘‘
111         assert row > 0, ‘行索引 必须大于0‘
112         return self.get_sheet_by_index(sheet_index).Rows(row)
113
114     def get_column(self, sheet_index=1, column=1):
115         ‘‘‘获取 Column 对象‘‘‘
116         assert column > 0, ‘列索引必须大于0‘
117         return self.get_sheet_by_index(sheet_index).Columns(column)
118
119     def get_range(self, sheet_index=1, row1=1, column1=1, row2=1, column2=1):
120         ‘‘‘获取 Range 对象‘‘‘
121         sheet = self.get_sheet_by_index(sheet_index)
122         return sheet.Range(self.get_cell(sheet, row1, column1), self.get_cell(sheet, row2, column2))
123
124     def get_cell_value(self, sheet_index, row, column):
125         ‘‘‘获取一个 cell 的值‘‘‘
126         return self.get_cell(sheet_index, row, column).Value
127
128     def set_cell_value(self, sheet_index, row, column, value):
129         ‘‘‘设置一个 cell 的值‘‘‘
130         self.get_cell(sheet_index=sheet_index, row=row, column=column).Value = value
131
132     def get_cell_text(self, sheet_index, row, column):
133         ‘‘‘获取一个 cell 的文本‘‘‘
134         return self.get_cell(sheet_index, row, column).Text
135
136     def set_cell_text(self, sheet_index, row, column, text):
137         ‘‘‘设置一个 cell 的文本‘‘‘
138         self.get_cell(sheet_index=sheet_index, row=row, column=column).Test = text
139
140     def get_cell_interior_color_index(self, sheet_index, row, column):
141         ‘‘‘获取一个 cell 的颜色值‘‘‘
142         return self.get_cell(sheet_index=sheet_index, row=row, column=column).Interior.ColorIndex
143
144     def set_cell_interior_color_index(self, sheet_index, row, column, color_index):
145         ‘‘‘设置一个 cell 的颜色值‘‘‘
146         self.get_cell(sheet_index=sheet_index, row=row, column=column).Interior.ColorIndex = color_index
147
148     def get_cell_horizongtal_alignment(self, sheet_index, row, column):
149         ‘‘‘获取一个 cell 的水平对齐方式‘‘‘
150         return self.get_cell(sheet_index=sheet_index, row=row, column=column).HorizontalAlignment
151
152     def set_cell_horizongtal_alignment(self, sheet_index, row, column, horizontal_alignment):
153         ‘‘‘设置一个 cell 的水平对齐方式‘‘‘
154         self.get_cell(sheet_index=sheet_index, row=row, column=column).HorizontalAlignment = horizontal_alignment
155
156     def get_cell_vertical_alignment(self, sheet_index, row, column):
157         ‘‘‘获取一个 cell 的竖直对齐方式‘‘‘
158         return self.get_cell(sheet_index=sheet_index, row=row, column=column).VerticalAlignment
159
160     def set_cell_vertical_alignment(self, sheet_index, row, column, vertical_alignment):
161         ‘‘‘设置一个 cell 的竖直对齐方式‘‘‘
162         self.get_cell(sheet_index=sheet_index, row=row, column=column).VerticalAlignment = vertical_alignment
163
164     def set_cell_number_format_local(self, sheet_index, row, column, number_format_local):
165         ‘‘‘设置一个 cell 的 数字格式‘‘‘
166         self.get_cell(sheet_index=sheet_index, row=row, column=column).NumberFormatLocal = number_format_local
167
168     def get_row_values(self, sheet_index, row):
169         ‘‘‘获取 row 对象的值‘‘‘
170         return self.get_row(sheet_index=sheet_index, row=row).Value
171
172     def set_row_values(self, sheet_index, row, values):
173         ‘‘‘设置 row 对象的值‘‘‘
174         self.get_row(sheet_index=sheet_index, row=row).Value = values
175
176     def get_row_interior_color_index(self, sheet_index, row):
177         ‘‘‘获取 row 对象的颜色值‘‘‘
178         return self.get_row(sheet_index=sheet_index, row=row).Interior.ColorIndex
179
180     def set_row_interior_color_index(self, sheet_index, row, color_index):
181         ‘‘‘设置 row 对象的颜色值‘‘‘
182         self.get_row(sheet_index=sheet_index, row=row).Interior.ColorIndex = color_index
183
184     def get_row_horizongtal_alignment(self, sheet_index, row):
185         ‘‘‘获取一个 row 的水平对齐方式‘‘‘
186         return self.get_row(sheet_index=sheet_index, row=row).HorizontalAlignment
187
188     def set_row_horizongtal_alignment(self, sheet_index, row, horizontal_alignment):
189         ‘‘‘设置一个 row 的水平对齐方式‘‘‘
190         self.get_row(sheet_index=sheet_index, row=row).HorizontalAlignment = horizontal_alignment
191
192     def get_row_vertical_alignment(self, sheet_index, row):
193         ‘‘‘获取一个 row 的竖直对齐方式‘‘‘
194         return self.get_row(sheet_index=sheet_index, row=row).VerticalAlignment
195
196     def set_row_vertical_alignment(self, sheet_index, row, vertical_alignment):
197         ‘‘‘设置一个 row 的竖直对齐方式‘‘‘
198         self.get_row(sheet_index=sheet_index, row=row).VerticalAlignment = vertical_alignment
199
200     def get_column_values(self, sheet_index, column):
201         ‘‘‘获取 column 对象的值‘‘‘
202         return self.get_column(sheet_index=sheet_index, column=column).values
203
204     def set_column_values(self, sheet_index, column, values):
205         ‘‘‘设置 column 对象的值‘‘‘
206         self.get_column(sheet_index=sheet_index, column=column).Value = values
207
208     def set_column_width(self, sheet_index, column, width):
209         ‘‘‘设置 column 对象的 宽度‘‘‘
210         self.get_column(sheet_index=sheet_index, column=column).ColumnWidth = width
211
212     def get_column_interior_color_index(self, sheet_index, column):
213         ‘‘‘获取 column 对象的颜色值‘‘‘
214         return self.get_column(sheet_index=sheet_index, column=column).Interior.ColorIndex
215
216     def set_column_interior_color_index(self, sheet_index, column, color_index):
217         ‘‘‘设置 column 对象的颜色值‘‘‘
218         self.get_column(sheet_index=sheet_index, column=column).Interior.ColorIndex = color_index
219
220     def get_column_horizongtal_alignment(self, sheet_index, column):
221         ‘‘‘获取一个 column 的水平对齐方式‘‘‘
222         return self.get_column(sheet_index=sheet_index, column=column).HorizontalAlignment
223
224     def set_column_horizongtal_alignment(self, sheet_index, column, horizontal_alignment):
225         ‘‘‘设置一个 column 的水平对齐方式‘‘‘
226         self.get_column(sheet_index=sheet_index, column=column).HorizontalAlignment = horizontal_alignment
227
228     def get_column_vertical_alignment(self, sheet_index, column):
229         ‘‘‘获取一个 column 的竖直对齐方式‘‘‘
230         return self.get_column(sheet_index=sheet_index, column=column).VerticalAlignment
231
232     def set_column_vertical_alignment(self, sheet_index, column, vertical_alignment):
233         ‘‘‘设置一个 column 的竖直对齐方式‘‘‘
234         self.get_column(sheet_index=sheet_index, column=column).VerticalAlignment = vertical_alignment
235
236     def get_range_values(self, sheet_index, row1, column1, row2, column2):
237         ‘‘‘获取 range 对象的值‘‘‘
238         return self.get_range(sheet_index=sheet_index, row1=row1, column1=column1, row2=row2, column2=column2)
239
240     def set_range_values(self, sheet_index, row1, column1, data):
241         ‘‘‘设置 range 对象的值‘‘‘
242         row2 = row1 + len(data) - 1
243         column2 = column1 + len(data[0] - 1)
244         range = self.get_range(sheet_index, row1, column1, row2, column2)
245         range.clear()
246         range.Value = data
247
248     def get_sheet_count(self):
249         ‘‘‘获取 页 数量‘‘‘
250         return self.__work_book.Worksheets.Count
251
252     def set_sheet_row_height(self, sheet_index, row_height):
253         ‘‘‘设置 sheet 对象的所有 行高‘‘‘
254         self.get_sheet_by_index(sheet_index=sheet_index).Rows.RowHeight = row_height
255
256     def set_sheet_column_width(self, sheet_index, column_width):
257         ‘‘‘设置 sheet 对象的所有 列宽‘‘‘
258         self.get_sheet_by_index(sheet_index=sheet_index).Columns.ColumnWidth = column_width
259
260     def set_sheet_horizontal_alignment(self, sheet_index, horizontal_alignment):
261         ‘‘‘设置 sheet 对象的水平对齐方式‘‘‘
262         self.get_sheet_by_index(sheet_index=sheet_index).Columns.HorizontalAlignment = horizontal_alignment
263
264     def get_max_row(self, sheet_index):
265         ‘‘‘获取最大行数量,非最大已使用行数量‘‘‘
266         return self.get_sheet_by_index(sheet_index=sheet_index).Rows.Count
267
268     def get_max_column(self, sheet_index):
269         ‘‘‘获取最大列数量,非最大已使用列数量‘‘‘
270         return self.get_sheet_by_index(sheet_index=sheet_index).Columns.Count
271
272     def clear_cell(self, sheet_index, row, column):
273         ‘‘‘清除 cell 对象的内容‘‘‘
274         self.get_cell(sheet_index=sheet_index, row=row, column=column).Clear()
275
276     def delete_cell(self, sheet_index, row, column):
277         ‘‘‘删除 cell‘‘‘
278         self.get_cell(sheet_index=sheet_index, row=row, column=column).Delete()
279
280     def clear_row(self, sheet_index, row):
281         ‘‘‘清除 row 的内容‘‘‘
282         self.get_row(sheet_index=sheet_index, row=row).Clear()
283
284     def delete_row(self, sheet_index, row):
285         ‘‘‘删除 row‘‘‘
286         self.get_row(sheet_index=sheet_index, row=row).Delete()
287
288     def clear_column(self, sheet_index, column):
289         ‘‘‘清除 column 的内容‘‘‘
290         self.get_column(sheet_index=sheet_index, column=column).Clear()
291
292     def delete_column(self, sheet_index, column):
293         ‘‘‘删除 column‘‘‘
294         self.get_column(sheet_index=sheet_index, column=column).Delete()
295
296     def clear_sheet(self, sheet_index):
297         ‘‘‘清除 sheet 的内容‘‘‘
298         self.get_sheet_by_index(sheet_index=sheet_index).Clear()
299
300     def delete_sheet(self, sheet_index):
301         ‘‘‘删除 sheet‘‘‘
302         self.get_sheet_by_index(sheet_index=sheet_index).Delete()
303
304     def delete_rows(self, sheet_index, start_row, count):
305         ‘‘‘ 删除指定数量的 行‘‘‘
306         max_row = self.get_max_row(sheet_index)
307         max_column = self.get_max_column(sheet_index)
308         end_row = start_row + count - 1
309         if start_row > max_row or end_row < 1:
310             return
311         self.get_range(sheet_index=sheet_index, row1=start_row, column1=1, row2=end_row, column2=max_column).Delete()
312
313     def delete_columns(self, sheet_index, start_column, count):
314         ‘‘‘删除指定数量的 列‘‘‘
315         max_row = self.get_max_row(sheet_index)
316         max_column = self.get_max_column(sheet_index)
317         end_column = start_column + count - 1
318         if start_column > max_column or end_column < 1:
319             return
320         self.get_range(sheet_index=sheet_index, row1=1, column1=start_column, row2=max_row, column2=end_column).Delete()
321
322     def write_share_name_code(self, sheet_index):
323         ‘‘‘写入 股票名称、股票代码‘‘‘
324         # 表格对齐方式设置
325         self.set_sheet_horizontal_alignment(sheet_index, win32com.client.constants.xlCenter)
326         # 表格行高设置
327         self.set_sheet_row_height(sheet_index, 15)
328         # 表格列宽设置
329         self.set_column_width(sheet_index, 1, 45)
330         self.set_column_width(sheet_index, 2, 45)
331         self.set_column_width(sheet_index, 3, 15)
332         self.set_column_width(sheet_index, 4, 15)
333         self.set_column_width(sheet_index, 5, 30)
334         # 列名称 设置
335         self.set_cell_value(sheet_index, 1, 1, ‘图标列‘)
336         self.set_cell_value(sheet_index, 1, 2, ‘图标列‘)
337         self.set_cell_value(sheet_index, 1, 3, ‘股票名称‘)
338         self.set_cell_value(sheet_index, 1, 4, ‘股票代码‘)
339         self.set_cell_value(sheet_index, 1, 5, ‘备注‘)
340         self.set_cell_value(sheet_index, 2, 5, ‘股东数量(户)‘)
341         self.set_cell_value(sheet_index, 3, 5, ‘股东数量环比比增长率(%)‘)
342         self.set_cell_value(sheet_index, 4, 5, ‘人均流通股(股)‘)
343         self.set_cell_value(sheet_index, 5, 5, ‘人均流通股环比增长率(%)‘)
344         self.set_cell_value(sheet_index, 6, 5, ‘股价(元/股)‘)
345         # 获取 股票名称、股票代码
346         share_name_code_url = ‘http://quote.eastmoney.com/stocklist.html‘
347         share_name_code_xpath_expression = "//div[@id=‘quotesearch‘]//a[@target=‘_blank‘]"
348         share_name_code_data = get_web_page_elements(url=share_name_code_url, xpath_expression=share_name_code_xpath_expression)
349         share_name_code_array = []
350         for each_share_name_code_datum in share_name_code_data:
351             each_share_name_code_datum_split = each_share_name_code_datum.text.split(‘(‘, -1)
352             each_share_name = each_share_name_code_datum_split[-2]
353             each_share_code = each_share_name_code_datum_split[-1].split(‘)‘, -1)[-2]
354             share_name_code_array.append([each_share_name, each_share_code])
355         print(‘股票名称、股票代码 获取完毕。‘)
356         # 对 股票代码排序
357         share_name_code_array_length = len(share_name_code_array)
358         for i in range(0, share_name_code_array_length):
359             for j in range(i, share_name_code_array_length):
360                 if share_name_code_array[i][1] > share_name_code_array[j][1]:
361                     share_name_code_array[i][1], share_name_code_array[j][1] = share_name_code_array[j][1], share_name_code_array[i][1]
362             if i % 100 == 0:
363                 print(‘正在排序:i = ‘ + str(i) + ‘ j = ‘ + str(j))
364         # 将 股票名称、股票代码 写入 Excel 表格 第3列、第4列
365         for i in range(0, share_name_code_array_length):
366             row = 5 * i + 2
367             self.set_cell_value(sheet_index, row, 3, share_name_code_array[i][0])
368             self.set_cell_number_format_local(sheet_index, row, 4, ‘@‘)
369             self.set_cell_value(sheet_index, row, 4, share_name_code_array[i][1])
370             self.set_row_interior_color_index(sheet_index, row, 15)     # 设置本行颜色为 灰色
371             if i % 100 == 0:
372                 print(‘正在写入股票代码:i = ‘ + str(i) + ‘ j = ‘ + str(j))
373
374     def write_report_date(self, sheet_index):
375         ‘‘‘写入 股东报告日期‘‘‘
376         share_report_date_url = ‘http://data.eastmoney.com/soft/cmjzd/‘
377         share_report_date_xpath_expression = "//select[@class=‘slt‘]/option"
378         share_report_date_data = get_web_page_elements(url=share_report_date_url, xpath_expression=share_report_date_xpath_expression)
379         share_report_date_index = 5
380         for each_report_share_date_datum in share_report_date_data:
381             share_report_date = each_report_share_date_datum.text
382             share_report_date_index += 1
383             self.set_cell_value(sheet_index, 1, share_report_date_index, share_report_date)
384             self.set_cell_number_format_local(sheet_index, 1, share_report_date_index, ‘yyyy-m-d‘)  # 设置 日期格式
385             self.set_column_width(sheet_index, share_report_date_index, 15)     # 设置 列宽
386
387     def write_share_holders(self, sheet_index):
388         ‘‘‘写入 股东数据‘‘‘
389         # 获取 日期数组长度
390         share_report_date_url = ‘http://data.eastmoney.com/soft/cmjzd/‘
391         share_report_date_xpath_expression = "//select[@class=‘slt‘]/option"
392         share_report_date_data = get_web_page_elements(url=share_report_date_url, xpath_expression=share_report_date_xpath_expression)
393         share_report_date_data_len = len(share_report_date_data)
394         # 获取股东数据
395         for share_report_date_index in range(share_report_date_data_len + 5, 5, -1):
396             share_report_date = self.get_cell_text(sheet_index, 1, share_report_date_index)
397             share_holders_url = r"http://datainterface.eastmoney.com/EM_DataCenter/JS.aspx?type=GG&sty=GDRS&st=1&sr=1&p=1&ps=5000&js=var%20tdokOZwB={pages:(pc),data:[(x)]}&mkt=1&fd=" + share_report_date
398             share_holders_session = HTMLSession()
399             headers = {
400                 ‘Coolie‘: ‘st_pvi=03451569348115; st_si=93770045203763‘,
401                 ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36‘
402             }
403             share_holders_request = share_holders_session.get(share_holders_url, headers=headers)
404             share_holders_data = share_holders_request.text.split(‘[‘)[1].split(‘]‘)[0].split(‘"‘, -1)
405             n = 0
406             for each_share_holders_datum in share_holders_data:
407                 if each_share_holders_datum == ‘‘ or each_share_holders_datum == ‘,‘:
408                     continue
409                 else:
410                     each_share_holders_datum_split = each_share_holders_datum.split(‘,‘, -1)
411                     # 股票代码
412                     share_code = each_share_holders_datum_split[0]
413                     for i in range(2, 25000):
414                         if self.get_cell_text(sheet_index, i, 4) == share_code:  # 如果 第三列 等于 股票代码
415                             # 股东数量(户)
416                             share_holders_number = int(each_share_holders_datum_split[2])
417                             self.set_cell_value(sheet_index, i, share_report_date_index, share_holders_number)
418                             # 股东数量环比比增长率(%)
419                             share_holder_number_comparative_ratio = float(each_share_holders_datum_split[3]) * 100
420                             self.set_cell_value(sheet_index, i + 1, share_report_date_index, share_holder_number_comparative_ratio)
421                             self.set_cell_number_format_local(sheet_index, i+1, share_report_date_index, ‘0.00‘)
422                             # 人均流通股(股)
423                             stock_holding_quantity_per_person = float(each_share_holders_datum_split[4])
424                             self.set_cell_value(sheet_index, i + 2, share_report_date_index, stock_holding_quantity_per_person)
425                             self.set_cell_number_format_local(sheet_index, i+2, share_report_date_index, ‘0.00‘)
426                             # 人均流通股环比增长率(%)
427                             former_stock_holding_quantity_per_person = self.get_cell_value(sheet_index, i+2, share_report_date_index+1)
428                             if former_stock_holding_quantity_per_person != None and  float(former_stock_holding_quantity_per_person) != 0:
429                                 qoq_ratio = stock_holding_quantity_per_person / former_stock_holding_quantity_per_person - 1
430                                 self.set_cell_value(sheet_index, i + 3, share_report_date_index, qoq_ratio)
431                                 self.set_cell_number_format_local(sheet_index, i + 3, share_report_date_index, ‘0.00‘)
432                             break
433                     if n % 100 == 0:
434                         print(time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime()) + ‘正在处理 ‘ + share_report_date + ‘ 的股票:‘ + share_code + ‘ 的数据。‘)
435                     n += 1
436
437
438 def main():
439     ‘‘‘main fuction‘‘‘
440     file_name = ‘a.xlsx‘
441     my_excel = PyExcel()
442     my_excel.open(file_name=file_name)
443     # my_excel.write_share_name_code(1)
444     my_excel.write_report_date(1)
445     my_excel.write_share_holders(1)
446
447     my_excel.save(newfile=file_name)
448     my_excel.close(1)
449
450
451 if __name__ == ‘__main__‘:
452     main()

原文地址:https://www.cnblogs.com/mcgill0217/p/10340013.html

时间: 2024-08-01 09:42:22

Pywin32操作Excel数据的类的相关文章

一个操作EXCEL的C#类ExcelUtils

最近在公司里一直从事服务类的工作,涉及到很多excel的处理.部分工作内容是每天重复的,只是每天的数据不同而已.我遇到的一个问题是客户每天发送的几种数据有些excel中的字段顺序是一致的,有些是不一致的,而对数据汇总就要一列一列的去调整,剪切,复制,粘贴,很麻烦.还有类似导入.导出数据.类似的问题.熟悉EXCEL的人肯定知道,其实EXCEL中为我们提供了很多常用的功能,比如筛选.排序.透视表统计等,只是需要手动去操作.实际这些常用操作完全可以用程序去替代,解放我们的双手.需要注意的是,写这种工具

C# 操作Excel数据透视表

一.概述 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等,可动态地改变透视表版面布置,也可以重新安排行号.列标和页字段.当改变版面布置时,数据透视表也会按照新的布置来进行更新,可以说是一个功能强大的数据分析工具.因此,本篇文章将介绍在C# 中关于Excel数据透视表的操作示例,示例内容主要包含以下要点: 1. 创建透视表 (1)创建数据缓存 (2)创建数据透视表 (3)添加行字段和列字段 (4)添加值字段 (5)设置样式 2.  设置行折叠.展开 3.  

.net 自己写的操作Excel 导入导出 类(以供大家参考和自己查阅)

由于现在网页很多都关系到Excel 的操作问题,其中数据的导入导出更是频繁,作为一个菜鸟,收集网上零散的知识,自己整合,写了一个Excel导入到GridView ,以及将GridView的数据导出到EXCEL的类方法,以供参考和方便自己以后查阅. 1 #region 引用部分 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Dat

Python安装和操作EXCEL数据

一.windows下面安装Python 1.安装Python 选择的版本是3.5.2版本.windows下面的Python安装一般是通过软件安装包安装而不是命令行,所以首先要在Python的官方主页上面下载最新的Python安装包.下载地址是:https://www.python.org/downloads/ 下载好后,解压到文件夹中,一直点击下一步就OK了.在安装完成之后,打开控制台,输入“Python”,我们能够看到下面的效果: 因为python.exe文件在 Python 目录下,我们还没

python读写操作excel数据

'''今天教务老师给我发来了一堆excel表 需要我处理一些数据都是一些基础的数据,这是今年来同济参加夏令营的申请材料在我按部就班的处理了几个之后,觉得这样处理实在是效率太低下了,于是我就写了下面这个程序,用python代码来批量化处理excel数据 首先 ,本科学校级别不同,985 211 会有不同的加分,所有我们要筛选匹配出所有人的本科学校,进行匹配 '''###首先建立985学校名单列表school_985 = ['清华大学','北京大学','厦门大学','天津大学', '中国科学技术大学

python读写操作excel数据小应用

'''今天教务老师给我发来了一堆excel表 需要我处理一些数据都是一些基础的数据,这是今年来同济参加夏令营的申请材料在我按部就班的处理了几个之后,觉得这样处理实在是效率太低下了,于是我就写了下面这个程序,用python代码来批量化处理excel数据 首先 ,本科学校级别不同,985 211 会有不同的加分,所有我们要筛选匹配出所有人的本科学校,进行匹配 '''###首先建立985学校名单列表school_985 = ['清华大学','北京大学','厦门大学','天津大学', '中国科学技术大学

利用 pywin32 操作 excel

1 from win32com.client import Dispatch 2 import win32com.client 3 import time 4 5 # 获取excel 对象 6 7 excel = win32com.client.Dispatch('Excel.Application') 8 9 """ 10 0代表隐藏对象,但可以通过菜单再显示 11 -1代表显示对象 12 2代表隐藏对象,但不可以通过菜单显示,只能通过VBA修改为显示状态 13 "

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

oledb 操作 excel

oledb excel http://wenku.baidu.com/search?word=oledb%20excel&ie=utf-8&lm=0&od=0 [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你! http://www.cnblogs.com/wolf-sun/p/3589605.html asp.net操作Excel(向excel模板添加数据) http://www.cnblogs.com/Silverlight_Team/