行列互換(轉置))
目錄Excel 中的轉置是什么意思安裝所需的 Python Excel 庫使用 Python 將 Excel 行轉換為列或將列轉換為行方法 1復制并轉置單元格區(qū)域方法 2使用 TRANSPOSE 函數(shù)轉置 Excel 數(shù)據(jù)兩種方法應該怎么選轉置 Excel 數(shù)據(jù)時需要注意什么總結在整理 Excel 數(shù)據(jù)時經(jīng)常會遇到數(shù)據(jù)排列方向不合適的情況。例如月份按列縱向排列而報表需要橫向展示或者導入的數(shù)據(jù)按列組織但后續(xù)處理時希望改成按行排列。在 Excel 中這種將行和列互換的操作稱為轉置。它常用于調(diào)整表格布局、整理導入數(shù)據(jù)或者讓現(xiàn)有數(shù)據(jù)更適合后續(xù)統(tǒng)計和報表展示。本文將介紹如何使用 Python 以編程方式轉置 Excel 中的行和列。Excel 中的轉置是什么意思轉置會交換單元格區(qū)域的行和列同時保持數(shù)據(jù)原有的排列順序。例如下面這組按列排列的數(shù)據(jù)一月 二月 三月 四月轉置后會變成一行一月 | 二月 | 三月 | 四月對于包含多行多列的單元格區(qū)域轉置后行數(shù)和列數(shù)也會互換。例如4 × 1的區(qū)域會變成1 × 43 × 5的區(qū)域則會變成5 × 3。安裝所需的 Python Excel 庫本文使用Spire.XLS for Python處理 Excel 文件。該庫可以直接讀取和修改 Excel 工作簿不需要安裝 Microsoft Excel。你通過 PyPI 安裝該庫pipinstallSpire.XLS如果已經(jīng)安裝 Spire.XLS但當前版本中沒有轉置功能可以通過以下命令升級版本pipinstall--upgradeSpire.XLS使用 Python 將 Excel 行轉換為列或將列轉換為行使用 Python 轉置 Excel 行列主要有兩種方式復制單元格區(qū)域并以轉置后的數(shù)據(jù)粘貼到其他位置使用 Excel 的TRANSPOSE函數(shù)讓轉置結果隨原數(shù)據(jù)變化下面分別介紹這兩種方法。方法 1復制并轉置單元格區(qū)域這種方式與 Excel 中的復制 選擇性粘貼 轉置類似。原來的數(shù)據(jù)不會被移動轉置后的內(nèi)容會寫入指定的單元格區(qū)域。假設A1:A4中有 4 個縱向排列的值下面的代碼可以將它們轉置到A8:D8fromspire.xlsimport*# 加載 Excel 工作簿workbookWorkbook()workbook.LoadFromFile(input.xlsx)# 獲取第一個工作表sheetworkbook.Worksheets[0]# 指定原始區(qū)域和轉置后的位置source_rangesheet.Range[A1:A4]dest_rangesheet.Range[A8:D8]# 復制并轉置單元格區(qū)域source_range.Copy(dest_range,CopyRangeOptions.Transpose)# 保存文件workbook.SaveToFile(TransposedOutput.xlsx,ExcelVersion.Version2016)workbook.Dispose()這里原來的A1:A4是一個4 × 1的區(qū)域轉置后寫入A8:D8變成1 × 4的橫向區(qū)域。如果要將一行數(shù)據(jù)轉換為一列只需要相應調(diào)整單元格區(qū)域source_rangesheet.Range[A1:D1]dest_rangesheet.Range[F1:F4]source_range.Copy(dest_range,CopyRangeOptions.Transpose)此時1 × 4的橫向區(qū)域會轉置成4 × 1的縱向區(qū)域。轉置也不限于單行或單列同樣可以處理包含多行多列的區(qū)域。例如將A1:C4轉置到E1:H3source_rangesheet.Range[A1:C4]dest_rangesheet.Range[E1:H3]source_range.Copy(dest_range,CopyRangeOptions.Transpose)原來的區(qū)域為4 × 3轉置后會變成3 × 4。方法 2使用 TRANSPOSE 函數(shù)轉置 Excel 數(shù)據(jù)如果希望轉置后的數(shù)據(jù)繼續(xù)跟隨原單元格中的內(nèi)容變化可以使用 Excel 的TRANSPOSE函數(shù)。Spire.XLS for Python 可以通過FormulaArray屬性為一個單元格區(qū)域設置數(shù)組公式。例如下面的代碼使用TRANSPOSE將A2:A4中的數(shù)據(jù)轉置到A10:C10fromspire.xlsimport*# 加載 Excel 工作簿workbookWorkbook()workbook.LoadFromFile(Sample.xlsx)# 獲取第一個工作表sheetworkbook.Worksheets[0]# 在 A10:C10 中設置 TRANSPOSE 數(shù)組公式dest_rangesheet.Range[A10:C10]dest_range.FormulaArrayTRANSPOSE(A2:A4)# 計算當前工作表中的公式sheet.CalculateAllValue()# 保存文件workbook.SaveToFile(TransposeFormulaOutput.xlsx,ExcelVersion.Version2016)workbook.Dispose()這種方式并不是直接復制A2:A4中的值而是在A10:C10中寫入引用原單元格的公式。因此當A2:A4中的數(shù)據(jù)發(fā)生變化并且工作表重新計算公式后轉置后的內(nèi)容也會隨之更新。提示TRANSPOSE函數(shù)只負責轉置數(shù)據(jù)不會同時復制原單元格的格式。如果需要保留字體、填充顏色、邊框、數(shù)字格式等樣式需要另外設置。兩種方法應該怎么選如果只是調(diào)整表格布局希望轉置后的數(shù)據(jù)與原數(shù)據(jù)相互獨立可以使用復制方法。如果希望轉置后的內(nèi)容隨原單元格數(shù)據(jù)變化而更新可以使用TRANSPOSE函數(shù)。轉置 Excel 數(shù)據(jù)時需要注意什么在實際處理 Excel 文件時還需要注意以下幾點單元格區(qū)域大小轉置后行數(shù)和列數(shù)會互換。例如4 × 1的區(qū)域轉置后需要1 × 4的空間。已有數(shù)據(jù)轉置前檢查寫入位置避免覆蓋原本需要保留的內(nèi)容。公式引用如果轉置的單元格中包含公式建議檢查轉置后的公式引用是否符合預期。合并單元格包含合并單元格的區(qū)域在轉置后可能出現(xiàn)布局問題處理前最好先確認合并情況。單元格格式如果最終文件對格式有要求應檢查數(shù)字格式、邊框、填充顏色、條件格式等是否需要單獨處理。區(qū)域重疊盡量不要將轉置后的數(shù)據(jù)直接寫回原區(qū)域以免覆蓋尚未處理的數(shù)據(jù)??偨YExcel 的轉置功能可以快速交換數(shù)據(jù)的行和列適合調(diào)整表格布局、整理導入數(shù)據(jù)以及重新組織報表內(nèi)容。使用 Spire.XLS for Python可以通過復制生成一份獨立的轉置數(shù)據(jù)也可以使用TRANSPOSE函數(shù)讓轉置結果隨原數(shù)據(jù)變化而更新。對于需要重復處理或批量調(diào)整 Excel 文件的場景使用 Python 可以減少手動操作并減少人工操作導致的錯誤。