>人è¥èªæ´ï¼è±ç¦»åè´±çäºï¼å°±å¿
ä½è´µéçå¨ç¿ï¼æä¸ºå£æ´ï¼åä¹ä¸»ç¨ï¼é¢å¤è¡åæ ·çåäºãä½ è¦éé¿å°å¹´çç§æ¬²ï¼å飿¸
å¿ç¥·å主ç人追æ±å
¬ä¹ãä¿¡å¾·ãä»ç±ãåå¹³ãææé£æææ å¦é®çè¾©è®ºï¼æ»è¦å¼ç»ï¼å 为ç¥éè¿çäºæ¯èµ·äºç«çã(2 TIMOTHY 2:21-23)
#çµåè¡¨æ ¼
䏿å°çµåè¡¨æ ¼ï¼å¯è½ç«å»æ³å°çæ¯excelãæ®ä¸ç¥ï¼çµåè¡¨æ ¼âå岿 ä¹
âï¼æ¯Wordè¦é¿ä¹
å¤äºãæ ¹æ®ç»´åºç¾ç§çè®°è½½æ´çä¸ä¸ªç®å²ï¼
>VisiCalcæ¯ç¬¬ä¸ä¸ªçµåè¡¨æ ¼ç¨åºï¼ç¨äºè¹æIIåçµèãç±ä¸¹Â·å¸æå
æï¼Dan Bricklinï¼åé®ä¼¯Â·æ³èå
æ¯é ï¼Bob Frankstonï¼ç¼å±èæï¼1979å¹´10æè·èèæäºèé»è
¦æ¨åºï¼æçºèæäºèé»è
¦ä¸çãæ®ºææç¨è»é«ãã
>æ¥ä¸æ¥æ¯Lotus 1-2-3ï¼ç±Lotus Softwareï¼ç¾åè®è±è»é«å
¬å¸ï¼æ¼1983å¹´èµ·ææ¨åºçé»å試ç®è¡¨è»é«ï¼å¨DOSææå»£çºå人é»è
¦ä½¿ç¨è
æä½¿ç¨ï¼æ¯ä¸å¥æ®ºæç´æç¨è»é«ã乿¯ä¸çä¸ç¬¬ä¸ä¸ªéå®è¶
è¿100ä¸å¥ç软件ã
>ç¶å微软ä¹å¼å§åçµåè¡¨æ ¼ï¼æ©å¨1982å¹´ï¼å®æ¨åºäºå®çç¬¬ä¸æ¬¾é»åå¶è¡¨è»ä»¶ââMultiplanï¼ä¸¦å¨CP/M系統ä¸å¤§ç²æåï¼ä½å¨MS-DOS系統ä¸ï¼Multiplanæçµ¦äºLotus 1-2-3ã
>1985å¹´ï¼å¾®è½¯æ¨åºç¬¬ä¸æ¬¾Excelï¼ä½å®åªç¨æ¼Mac系統ï¼ç´å°1987å¹´11æï¼å¾®è½¯çç¬¬ä¸æ¬¾é©ç¨æ¼Windows系統çExcelæè¯çï¼ä¸è¿ï¼å®ä¸åºæ¥ï¼å°±ä¸Windowsç³»ç»ç´æ¥æç¶ï¼ç±äºæ¤åwindows大è¡å
¶éï¼å¹¶ä¸Lotus1-2-3é²é²ä¸è½é©ç¨æ¼Windows系統ï¼å°äº1988å¹´ï¼Excelçé·éè¶
éäº1-2-3ã
>æ¤åå°±æ¯å¾®è½¯ç天ä¸äºï¼Excel忥åå¹¶å
¥äºOfficeéé¢ï¼æä¸ºäºMicrosoft Office Excelã
>尽管Excelå·²ç»åå±äºå¾å¤ä»£ï¼æä¾äºå¤§éçç¨æ¶çé¢ç¹æ§ï¼ä½å®ä»ç¶ä¿çäºç¬¬ä¸æ¬¾é»åå¶è¡¨è»ä»¶VisiCalcçç¹æ§ï¼è¡ãåçµæå®å
æ ¼ï¼æ¸æãèæ¸æç¸éçå
¬å¼æè
å°å
¶ä»å®å
æ ¼ççµå°å¼ç¨ä¿åå¨å®å
æ ¼ä¸ã
>ç±äºå¾®è½¯ç¬é¸å¤©ä¸ï¼Lotus 1-2-3å·²ç»æ·¡åºäºäººä»¬çè§çº¿ï¼çè³äºè¯¯è®¤ä¸ºåå²å°±æ¯ä»å¾®è½¯å¼å§çã
>å
¶å®ï¼é¤äºå¾®è½¯ççµåè¡¨æ ¼ï¼å¨Linuxç³»ç»ä¸ä¹æå¾å¥½ççµåè¡¨æ ¼ï¼google乿ä¾äºä¸éçå¨çº¿çµåè¡¨æ ¼ï¼å¯ææå½å
ä¸è½æ£å¸¸è®¿é®ï¼ã
ä»åå²å°ç°å¨ï¼çµåè¡¨æ ¼é½å¾å¹¿æ³çç¨éãæä»¥ï¼Pythonä¹è¦æä½ä¸çªçµåè¡¨æ ¼ï¼å 为æäºæ°æ®ï¼å°±åå¨çµåè¡¨æ ¼ä¸ã
##openpyxl
openpyxlæ¨¡åæ¯è§£å³Microsoft Excel 2007/2010ä¹ç±»çæ¬ä¸æ©å±åæ¯Excel 2010 xlsx/xlsm/xltx/xltmçæä»¶ç读åçç¬¬ä¸æ¹åºã
###å®è£
å®è£
ç¬¬ä¸æ¹åºï¼å½ç¶ç¨æ³åæ è¾¹çpip installã
$ sudo pip install openpyxl
妿æç»çå°ä¸é¢çæç¤ºï¼æåä½ ï¼å®è£
æåã
Successfully installed openpyxl jdcal
Cleaning up...
###workbookåsheet
ç¬¬ä¸æ¥ï¼å¼å
¥æ¨¡åï¼ç¨ä¸é¢çæ¹å¼ï¼
>>> from openpyxl import Workbook
æ¥ä¸æ¥å°±ç¨`Workbook()`ç±»éé¢çæ¹æ³å±å¼å·¥ä½ï¼
>>> wb = Workbook()
请åå¿Excelæä»¶ï¼å¦ææ³ä¸èµ·æ¥ï¼å°±æå¼Excelï¼æä»¬ç¬¬ä¸ç¼çå°çæ¯ä¸ä¸ªç§°ä¹ä¸ºå·¥ä½ç°¿(workbook)çä¸è¥¿ï¼é颿å 个sheetï¼é»è®¤æ¯ä¸ä¸ªï¼å½ç¶å¯ä»¥éæå¢å ãé»è®¤ä½¿ç¨ç¬¬ä¸ä¸ªsheetã
>>> ws = wb.active
æ¯ä¸ªå·¥ä½ç°¿ä¸ï¼è³å°è¦æä¸ä¸ªsheetï¼éè¿è¿æ¡æä»¤ï¼å°±å¨å½åå·¥ä½ç°¿ä¸å»ºç«äºä¸ä¸ªsheetï¼å¹¶ä¸å®æ¯å½åæ£å¨ä½¿ç¨çã
è¿å¯ä»¥å¨è¿ä¸ªsheetåé¢è¿½å ï¼
>>> ws1 = wb.create_sheet()
çè³ï¼è¿å¯ä»¥æéï¼
>>> ws2 = wb.create_sheet(1)
å¨ç¬¬äºä¸ªä½ç½®æå
¥äºä¸ä¸ªsheetã
å¨Excelæä»¶ä¸ä¸æ ·ï¼å建äºsheetä¹åï¼é»è®¤é½æ¯ä»¥"Sheet1"ã"Sheet2"æ ·åæ¥å½åçï¼ç¶åæä»¬å¯ä»¥ç»å
¶éæ°å½åãå¨è¿éï¼ä¾ç¶å¯ä»¥è¿ä¹åã
>>> ws.title = "python"
`ws`æå¼ç¨çsheet对象ååå°±æ¯"python"äºã
æ¤æ¶ï¼å¯ä»¥ä½¿ç¨ä¸é¢çæ¹å¼ä»å·¥ä½ç°¿å¯¹è±¡ä¸å¾å°sheetã
>>> ws01 = wb['python'] #sheetåå·¥ä½ç°¿çå
³ç³»ï¼ç±»ä¼¼é®å¼å¯¹çå
³ç³»
>>> ws is ws01
True
æè
ç¨è¿ç§æ¹å¼
>>> ws02 = wb.get_sheet_by_name("python") #è¿ä¸ªæ¹æ³ååä¹å¤ªç´æ¥äºï¼æ¹æ³çåæ°å°±æ¯sheetåå
>>> ws is ws02
True
æ´çä¸ä¸å°ç®åä¸ºæ¢æä»¬å·²ç»å®æçå·¥ä½ï¼å»ºç«äºå·¥ä½ç°¿(wb)ï¼è¿æä¸ä¸ªsheetãè¿æ¯æ¾ç¤ºä¸ä¸æ¯è¾å¥½ï¼
>>> print wb.get_sheet_names() #Python 3: print(wb.get_sheet_names())
['python', 'Sheet2', 'Sheet1']
Sheet2乿以æå¨äºç¬¬äºä½ï¼æ¯å 为å¨å»ºç«çæ¶åï¼ç¨äºä¸ä¸ªæéçæ¹æ³ãè¿è·å¨Excelä¸å·®ä¸å¤å°ï¼å¦æSheetå½åäºï¼å°±æç
§é£ä¸ªååæ¾ç¤ºï¼å¦åå°±é»è®¤ä¸ºå忝"Sheet1"å½¢ç¶çï¼æ³¨æï¼ç¬¬ä¸ä¸ªåæ¯å¤§åï¼ã
ä¹å¯ä»¥ç¨å¾ªç¯è¯å¥ï¼æææçSheetååæå°åºæ¥ã
>>> for sh in wb:
... print sh.title #Python 3: print(sh.title)
...
python
Sheet2
Sheet1
å¦æè¯»è
`dir(wb)`å·¥ä½ç°¿å¯¹è±¡ç屿§åæ¹æ³ï¼ä¼åç°å®å
·æè¿ä»£çç¹å¾`__iter__`ã说æï¼å·¥ä½ç°¿å¯¹è±¡æ¯å¯è¿ä»£çã
###cell
为äºè½å¤æ¸
æ¥çè§£åçµåè¡¨æ ¼ä¸å¢å æ°æ®çè¿ç¨ï¼å°çµå表ä¸çº¦å®çå称以ä¸å¾æ¹å¼è¯´æï¼

对äºsheetï¼å
¶ä¸çcellæ¯å®çä¸çº§åä½ãæä»¥ï¼è¦å¾å°æä¸ªcellå¯ä»¥è¿æ ·ï¼
b4 = ws['B4']
妿B4è¿ä¸ªcellå·²ç»æäºï¼ç¨è¿ç§æ¹æ³å°±æ¯å°å®çå¼èµç»äºåé`b4`ï¼å¦æsheet䏿²¡æè¿ä¸ªcellï¼é£ä¹å°±å建è¿ä¸ªcell对象ã
请读è
注æï¼å½æä»¬æå¼Excelï¼é»è®¤å·²ç»ç»å¥½äºå¥½å¤cellã使¯ï¼å¨Pythonæä½ççµåè¡¨æ ¼çæ
åµä¸ï¼ä¸ä¼é»è®¤ç»å¥½é£æ ·ä¸ä¸ªè¡¨æ ¼ï¼ä¸åé½è¦å建ä¹åææãæä»¥ï¼å¦ææç
§åé¢çæä½æµç¨ï¼ä¸é¢å°±æ¯å建äºB4è¿ä¸ªcellï¼å¹¶ä¸æå®ä½ä¸ºä¸ä¸ªå¯¹è±¡è¢«b4åéå¼ç¨ã
妿è¦ç»B4æ·»å æ°æ®ï¼å¯ä»¥è¿ä¹åï¼
>>> ws['B4'] = 4444
å 为`b4`å¼ç¨äºä¸ä¸ªcellå¯¹è±¡ï¼æä»¥å¯ä»¥å©ç¨è¿ä¸ªå¯¹è±¡ç屿§æ¥æ¥çå
¶å¼ï¼
>>> b4.value
4444
è¦è·å¾ï¼æè
建ç«å¹¶è·å¾ï¼æä¸ªcell对象ï¼è¿å¯ä»¥ä½¿ç¨ä¸é¢æ¹æ³ï¼
>>> a1 = ws.cell("A1")
æè
ï¼
>>> a2 = ws.cell(row = 2, column = 1)
åæå·²ç»æå°ï¼å¨å»ºç«äºSheetä¹åï¼å
åä¸çå®å¹¶æ²¡æcellï¼éè¦ç¨åºå»å»ºç«ãä¸é¢é½æ¯ä¸ä¸ªä¸ä¸ªå°å»ºç«ï¼è½ä¸è½ä¸ä¸å»ºç«å¤ä¸ªå¢ï¼æ¯å¦è¦ç±»ä¼¼ä¸é¢çï¼
|A1|B1|C1|
|----|----|---|
|A2|B2|C2|
|A3|B3|C3|
å°±å¯ä»¥å¦ååç飿 ·æ¥æä½ï¼
>>> cells = ws["A1":"C3"]
å¯ä»¥ç¨ä¸é¢æ¹æ³ççåå»ºç»æï¼
>>> tuple(ws.iter_rows("A1:C3"))
((