作者: ~monkey~ 時間: 2016-3-22 17:05 標題: 想搵方法 read / write excel
要係server 唔同folder read 幾個excel (eg. A,B,C) 之後digest 佢地d data 再write 返落其他Excel (eg. D,E,F)
因為睇D,E,F 既人冇access right 睇A,B,C ,所以唔可以就咁係D,E,F入面link 埋A,B,C 拎data
有咩方法好?
作者: bongbong3481 時間: 2016-3-22 19:39 標題: 標題
回覆 1# ~monkey~
咁abc 既data 會不會不斷咁更新呢? 如果吾會,人工預早整幾個def file 得吾得?
作者: ~monkey~ 時間: 2016-3-22 21:24
ABC係會每日不定時更新
作者: bongbong3481 時間: 2016-3-22 21:51
回覆 3# ~monkey~
可唔可以寫 PROGRAM e.g. VBS/VBA, 每當ABC一更新完,就自動咁將 ABC 變成DEF?
作者: ~monkey~ 時間: 2016-3-22 23:12
回覆 ~monkey~
可唔可以寫 PROGRAM e.g. VBS/VBA, 每當ABC一更新完,就自動咁將 ABC 變成DEF? ...
bongbong3481 發表於 22/3/2016 09:51 PM
D EXCEL 放係FILE SERVER, VBS/VBA 可唔可以check到佢地幾時有update?
其實諗過ABC有野UPDATE就會射晒去EXCEL Z, 之後Z 就再計完一大餐之後再射返RESULT 去D,E,F
但A,B,C,D,E,F 其實係由6個獨立人士擁有,大家睇唔到大家 , 如果行VBA/VBS ,access right 點攪
作者: bongbong3481 時間: 2016-3-22 23:40
回覆 5# ~monkey~
VBS/VBA可以CHECK到 FILE LAST MODIFIED DATE (TIME好似得,但我未試過
所以只有6個獨立人士既電腦先可以使用到各自的A,B,C,D,E,F檔案?
如是,6個獨立人士既電腦入邊可不可額外加一個PROGRAM, 當FILE 更新完,就自動轉換。
或者6個獨立人士將 ACCESS RIGHT 開多個比獨立第3者, 專門幫手做轉換工作。
作者: ~monkey~ 時間: 2016-3-23 13:51
回覆 ~monkey~
VBS/VBA可以CHECK到 FILE LAST MODIFIED DATE (TIME好似得,但我未試過)
所以只有6個獨立人士既電腦先可以使用到各自的A,B,C,D,E,F檔案?
如是,6個獨立人士既電腦入邊可不可額外加一個PROGRAM, 當FILE 更新完,就自動轉換。
或者6個獨立人士將 ACCESS RIGHT 開多個比獨立第3者, 專門幫手做轉換工作。
bongbong3481 發表於 22/3/2016 11:40 PM
而家我就係第7個人可以ACCESS晒6個FILE人手做
所以先睇下有咩方法唔駛我做,由prgoram做
作者: bongbong3481 時間: 2016-3-23 14:31 標題: 標題
回覆 7# ~monkey~
咁如果你有access right, 用vbs/vba, 由番工到收工時間,不斷咁/每N秒 detect, 一detect 到file 有modified 過, 就自動將原檔轉換
作者: 觀星是答案 時間: 2016-3-23 21:16
點解一定要用 excel 做,呢 d 用 database 做可能更適合
作者: toylet 時間: 2016-3-23 23:52
提示: 作者被禁止或刪除 內容自動屏蔽
作者: toylet 時間: 2016-3-23 23:53
提示: 作者被禁止或刪除 內容自動屏蔽
作者: hm7781 時間: 2016-3-24 06:36
回覆 1# ~monkey~
我做梗類似嘅野。
將每幾百個一樣格式嘅EXCEL, 入面特定嘅內容summarize 返做一個EXCEL。
我用python 寫條script,用openpyxl, xlrd 兩個module 去read 每個EXCEL 嘅內容之後, 再寫入一個新EXCEL FILE。
都可以寫入其他EXCEL FILE, 但係如果個FILE 入面有有PIVOT TABLE嘅話會破壞咗個PIVOT TABLE,
要用PIVOT TABLE 嘅話要開個新FILE LINK過去避免寫入去時破壞咗個PIVOT TABLE。
另外我唔想喺其他電腦都裝python 先run到條script , 放埋個winpython上file server 就部部機都可以run到。
作者: ~monkey~ 時間: 2016-3-24 07:58
本帖最後由 ~monkey~ 於 2016-3-24 08:00 編輯
我個ABC都係同format,可唔可以分享下d script
作者: hm7781 時間: 2016-3-24 21:10
回覆 13# ~monkey~
講明先, 我冇學過programming , 只係上網左抄右抄人d script 一知半解咁用, 可能有錯, 仲可能寫得好怪。
話就話一樣格式但係間唔中梗有幾個excel 多一行少一行走晒位所以要逐個cell search :
- import os
- import openpyxl ##淨係可以讀寫xlsx
- import xlrd ##淨係可以讀xls, 要寫要用xlwt, openpyxl 同xlrd 都要用pip 另外裝咗先用到
- dirpath = "/path/to/excel/files" ##準備個filelist 先
- FILES = []
- for DIRpaths,DIRnames,FILEnames in os.walk(dirpath):
- for file in FILEnames:
- row = []
- row.append(DIRpaths)
- row.append(file)
- FILES.append(row)
- FILESxls = []
- for DIRpaths, file in FILES: ##filter 走唔關事嘅file
- if (file.find('.xls') >= 0 and file.find('.xlsx') < 0):
- FILESxls.append(os.path.join(DIRpaths,file))
- TABLE = [] ##開個table , 讀完所有data 之後一次過寫入去新xlsx
- for file in FILESxls:
- workbook = xlrd.open_workbook(file)
- worksheet = workbook.sheet_by_index(0) ## 逐個xls 開, read第一張sheet
- num_of_row = worksheet.nrows
- num_of_col = worksheet.ncols ##先check 下有data 嘅範圍有幾大
- ##set 返個limit, 費事有d人喺個xls 度寫到落65535咁就有排讀
- if num_of_row > 100:
- num_of_row = 100
- if num_of_col > 13:
- num_of_col = 13
- for y in range(num_of_row):
- for x in range(num_of_col):
- cell = worksheet.cell_value(y,x) ##從上至下左至右逐個cell 讀, 先讀每個excel 只有一個嘅value
- if isinstance(cell, str):
- if "ABC" in cell:
- ABC = worksheet.cell_value(y+1,x) ##記低寫住"ABC"個cell 對落一格個value
- if "CBA" in cell:
- CBA = []
- CBA.append(x)
- CBA.append(y) ##記低寫住"CBA"個cell 個座標
- if "Date" in cell:
- DATE = worksheet.cell_value(y,x)
- DATE = '=text("'+str(DATE)+'","yyyy-mm-dd")' ##日子唔識搞, 夾硬用excel function 寫入去
- if "1234567" in cell:
- STARTROW = []
- STARTROW.append(x)
- STARTROW.append(y)
- ENDROW = []
- ENDROW.append(1)
- ENDROW.append(num_of_row-1) ##指定某個範圍一陣再讀一次
- for y in range(STARTROW[1]+3,ENDROW[1]-1):
- row = []
- row.append(DATE)
- row.append(ABC)
- row.append(worksheet.cell_value(y,CBA[0])) ##根據之前記低個座標逐行讀落去
- TABLE.append(row) ##逐行寫入table, 寫完loop 返上去去下一個xls
-
- workbook = openpyxl.Workbook() ## 開新xlsx 準備寫入去
- worksheet = workbook.active
- if TABLE:
- n = ('DATE','ABC','CBA')
- for x in range(len(TABLE[0])):
- worksheet.cell(column=x+1,row=1).value = n[x] ##先寫第一行field names
- num_of_head_row = 1
- for y in range(len(TABLE)):
- for x in range(len(TABLE[y])):
- worksheet.cell(column=x+1,row=y+1+num_of_head_row).value = TABLE[y][x] ##跟住由上至下左至右逐個cell 寫入去
- output = "/path/to/output/file"
- workbook.save(output) ##save file, 完
- else:
- print("no TABLE")
作者: ~monkey~ 時間: 2016-3-24 21:23
回覆 ~monkey~
講明先, 我冇學過programming , 只係上網左抄右抄人d script 一知半解咁用, 可能有錯, 仲 ...
hm7781 發表於 24/3/2016 09:10 PM
THANKS~放心,我都冇學過programming,我會慢慢睇同慢慢試
作者: bongbong3481 時間: 2016-3-25 00:10 標題: 標題
回覆 14# hm7781
請問下用python處理幾百個excel , 大約用幾奈時間?
作者: hm7781 時間: 2016-3-25 08:39
602 xls
real 0m28.087s
user 0m6.836s
sys 0m0.292s
作者: bongbong3481 時間: 2016-3-25 18:22
回覆 17# hm7781
快成咁啊!
我系公司都系搞幾百個FILE(不過用VBS),只系不斷咁COPY 去一個FILE, 然後SET 番D FORMAT, 都用左20分鐘
作者: hm7781 時間: 2016-3-25 19:36
我嫌慢添, 不過叫做work 仲用到暫時頂住檔先, 有時間先再refine 下。
VBS 似乎可以搞多D EXCEL FORMAT 嘅野, 但個人覺得好難學搞佢唔掂,
對我嚟講都係python 易用D 。
作者: seasonpp 時間: 2016-4-23 22:55
其實幾百個file經已唔係excel最有效率去做,用個database 裝會好好多
via HKEPC Ionic Reader v1.2.9 - iPad
作者: hm7781 時間: 2016-4-24 20:41
其實幾百個file經已唔係excel最有效率去做,用個database 裝會好好多
via HKEPC Ionic Reader v1. ...
seasonpp 發表於 2016-4-23 22:55
相信我, 當你要同班電腦盲一齊做野嘅時候, excel 絶對係最有"效率"的做法。
作者: bongbong3481 時間: 2016-4-24 22:51 標題: 標題
回覆 21# hm7781
同意,一般性數據處理都系用excel多, 要處理大數據果d , 基本上都吾系普通文職。 如果excel 能處理到,我都盡量用excel, 因為簡單易用,普遍性高。
作者: funghanyue 時間: 2016-4-25 03:54
如果只係好簡單的幾個 - 十幾個 Files
d Format 又唔會變的話,自己寫個 Macro 都得
可以用 錄製Macro 大概的流程,然後手動改入面 Variables

