使用Python操作Excel


最近在學校的發展規划處參加了一小部分代碼的編寫工作,主要功能邏輯是把從ESI上下載下來的各領域表中的數據進行分析。說是讓我接手前人所做的工作,卻發現給我的資料當中只有兩個exe文件,沒有任何源碼,只好從頭寫起。雖說不涉及爬蟲,也不是很難,但是要處理這么多數據,要生成這么多表確實還挺煩的,加之我毫無Python編程基礎,在項目編寫過程中難免遇到問題,下面是我在程序編寫的過程中遇到的問題,有些是對Python語言特性不熟悉而產生的問題,有些是自己對代碼邏輯沒搞懂而遇到的問題。
 
1.  用Python操作Excel
import xlrd
 
cwd = os.getcwd()
 
FilePath = cwd + "\\file.xls"
File = xlrd.open_workbook(FilePath)
sheet = File.sheet_by_index(0)
 
#獲得某個cell的值
sheet.cell_value(x, y)
 
import xlwt
 
FilePath = cwd + "\\file.xls"
File = xlwt.Workbook(encoding = 'utf-8', style_compression = 0)
sheet = File.add_sheet('sheet0', cell_overwrite_ok = True)
 
#寫單元格
sheet.write(x, y, content, style)
 
#單元格合並
sheet.write_merge(x1, x2, y1, y2, content, style)
#即合並x1到x2列、y1到y2行(含x2與y2)的單元格,網上解釋的十分復雜,但是邏輯非常簡單的
 
File.save(FilePath)
#注意最后一定要保存!

 

單元格樣式
#若直接以style()作為write的參數,每次運行一行write都會創建一個新的style對象,程序會報錯,比較保險的方法是在使用之前先創建一個style對象,用的使用直接使用style對象作為參數傳入即可。
StyleDefault = style()
sheet1.write(0,0, content1, StyleDefault)
sheet1.write(1,1, content2, StyleDefault)
sheet1.write(2,2, content3, StyleDefault)
 
#設置單元格寬、高
sheet.col(1).width = 4000
sheet.row(1).height = 3000
 
2. Python特性
(1)自加/自減
編寫代碼過程中發現Python並沒有其他語言中很常見的++、--運算符,於是查了資料,才知道python是以內容為基准的,而不像C/C++以變量為基准,同一個數字5可以用多個名稱來訪問,a=5和b=5指向的都是同一個對象(可以使用id()觀察發現)。這樣的邏輯就決定了數字類型的值是無法改變的,也就無法使用自增自減運算符。
正確的自增:a = a + 1 / a += 1 
其中,python有個整數池,默認1~256的數字都屬於這個整數池,這些每次賦值的時候,是取得池中的整數對象。
 
(2)is 與 ==
若is是True的,那么==的結果也為True
is compares for two objects in memory, == compares their values
 
(3)數組的初始化
Python中不能直接使用一個沒有初始化的數組,一維數組的初始化比較簡單,直接用0代表初始元素即可,如a = [0] * 10。二維數組的初始化主要有這幾種方式:
[([0] * 3) for i in range(4)]
[[0 for col in range(3)] for row in range(4)]

 

創建一個4行3列的二維數組
 
(4)關於List
Python中的List與Array不同,同一個List里的元素數據類型可以不同,其實它保存的就是指針的集合,而非數據本身。Array是numpy當中封裝的,轉換關系如下:
a=np.array([1,2,3,4,5])              #List轉換為Array
b=np.array([[1,2,3],[4,5,6]])      #List轉換為二維Array
c=list(a)                                    #Array轉換為List
 
List的排序方法是sort(),如果要降序排序,則需要添加一個(reverse=True)參數,如:list1.sort(reverse=True)
 
當List作為參數傳入一個函數時,是作為實參傳入的,如果在函數內操作該List時,原來的List也會發生變化,要生成這個List的副本,使用copy()方法即可,如list2 = list1.copy()
 
(5)循環操作
比較常用的是for循環,與其他語言的循環語句不同,Python的循環語句是“for i in range(10)”或“for i in range(0, 10)”的形式,要注意的是后一個參數是不包括在判斷當中的,相當於“for(i = 0, i < 10; i++)”。若要遍歷一個List當中的元素同時獲得該元素對應的index,則需要使用“for i, item in enumerate(List1)”的格式。
 
(6)小數輸出為百分號格式
decimal = "%.2f%%" % (num * 100)
 
 
主要先是這些問題,日后想到再補充……
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM