Board logo

標題: 想搵方法 read / write excel [打印本頁]

作者: ~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

回覆  ~monkey~

咁abc 既data 會不會不斷咁更新呢?    如果吾會,人工預早整幾個def file 得吾得? ...
bongbong3481 發表於 22/3/2016 07:39 PM



    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 編輯
回覆  ~monkey~


我做梗類似嘅野。
將每幾百個一樣格式嘅EXCEL, 入面特定嘅內容summarize 返做一個EXCEL ...
hm7781 發表於 24/3/2016 06:36 AM



    我個ABC都係同format,可唔可以分享下d script
作者: hm7781    時間: 2016-3-24 21:10

回覆 13# ~monkey~

講明先, 我冇學過programming , 只係上網左抄右抄人d script 一知半解咁用, 可能有錯, 仲可能寫得好怪。
話就話一樣格式但係間唔中梗有幾個excel 多一行少一行走晒位所以要逐個cell search :
  1. import os
  2. import openpyxl ##淨係可以讀寫xlsx
  3. import xlrd  ##淨係可以讀xls, 要寫要用xlwt, openpyxl 同xlrd 都要用pip 另外裝咗先用到

  4. dirpath = "/path/to/excel/files" ##準備個filelist 先
  5. FILES = []
  6. for DIRpaths,DIRnames,FILEnames in os.walk(dirpath):
  7.     for file in FILEnames:
  8.         row = []
  9.         row.append(DIRpaths)
  10.         row.append(file)
  11.         FILES.append(row)

  12. FILESxls = []  
  13. for DIRpaths, file in FILES:  ##filter 走唔關事嘅file
  14.     if (file.find('.xls') >= 0 and file.find('.xlsx') < 0):
  15.         FILESxls.append(os.path.join(DIRpaths,file))

  16. TABLE = []  ##開個table , 讀完所有data 之後一次過寫入去新xlsx
  17. for file in FILESxls:
  18.     workbook = xlrd.open_workbook(file)
  19.     worksheet = workbook.sheet_by_index(0) ## 逐個xls 開, read第一張sheet

  20.     num_of_row = worksheet.nrows
  21.     num_of_col = worksheet.ncols  ##先check 下有data 嘅範圍有幾大

  22.         ##set 返個limit, 費事有d人喺個xls 度寫到落65535咁就有排讀
  23.     if num_of_row > 100:
  24.         num_of_row = 100
  25.     if num_of_col > 13:
  26.         num_of_col = 13

  27.     for y in range(num_of_row):
  28.         for x in range(num_of_col):
  29.             cell = worksheet.cell_value(y,x) ##從上至下左至右逐個cell 讀, 先讀每個excel 只有一個嘅value
  30.             if isinstance(cell, str):

  31.                                 if "ABC" in cell:
  32.                     ABC = worksheet.cell_value(y+1,x) ##記低寫住"ABC"個cell 對落一格個value

  33.                                 if "CBA" in cell:
  34.                     CBA = []
  35.                     CBA.append(x)
  36.                     CBA.append(y) ##記低寫住"CBA"個cell 個座標

  37.                                 if "Date" in cell:
  38.                     DATE = worksheet.cell_value(y,x)
  39.                     DATE = '=text("'+str(DATE)+'","yyyy-mm-dd")' ##日子唔識搞, 夾硬用excel function 寫入去

  40.                                 if "1234567" in cell:
  41.                     STARTROW = []
  42.                     STARTROW.append(x)
  43.                     STARTROW.append(y)

  44.                 ENDROW = []
  45.                 ENDROW.append(1)
  46.                 ENDROW.append(num_of_row-1) ##指定某個範圍一陣再讀一次

  47.     for y in range(STARTROW[1]+3,ENDROW[1]-1):
  48.         row = []
  49.         row.append(DATE)
  50.                 row.append(ABC)
  51.         row.append(worksheet.cell_value(y,CBA[0])) ##根據之前記低個座標逐行讀落去

  52.         TABLE.append(row) ##逐行寫入table, 寫完loop 返上去去下一個xls


  53. workbook = openpyxl.Workbook() ## 開新xlsx 準備寫入去
  54. worksheet = workbook.active

  55. if TABLE:
  56.     n = ('DATE','ABC','CBA')
  57.     for x in range(len(TABLE[0])):
  58.         worksheet.cell(column=x+1,row=1).value = n[x] ##先寫第一行field names

  59.     num_of_head_row = 1

  60.     for y in range(len(TABLE)):
  61.         for x in range(len(TABLE[y])):
  62.             worksheet.cell(column=x+1,row=y+1+num_of_head_row).value = TABLE[y][x] ##跟住由上至下左至右逐個cell 寫入去

  63.         output = "/path/to/output/file"
  64.     workbook.save(output) ##save file, 完

  65. else:
  66.     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

回覆  hm7781

請問下用python處理幾百個excel ,  大約用幾奈時間?
bongbong3481 發表於 2016-3-25 00:10


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

回覆  hm7781

快成咁啊!

我系公司都系搞幾百個FILE(不過用VBS),只系不斷咁COPY 去一 ...
bongbong3481 發表於 2016-3-25 18:22


我嫌慢添, 不過叫做work 仲用到暫時頂住檔先, 有時間先再refine 下。
VBS 似乎可以搞多D EXCEL FORMAT 嘅野, 但個人覺得好難學搞佢唔掂,
對我嚟講都係python 易用D 。
作者: seasonpp    時間: 2016-4-23 22:55

602 xls

real    0m28.087s
user    0m6.836s
sys     0m0.292s
hm7781 發表於 2016-3-25 08:39


   
其實幾百個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





歡迎光臨 電腦領域 HKEPC Hardware (https://h0.hkepc.com/forum/) Powered by Discuz! 7.2