2020-03-25 Excel常見格式相互轉(zhuǎn)換與合并操作

首先糯钙,這些操作也許不是最佳的辦法粪狼,但都是經(jīng)過實操能夠?qū)崿F(xiàn)的。本科一個學(xué)院院長說的好超营,老外搞研究不一定會尋求最好的辦法鸳玩,只要這個辦法能夠?qū)崿F(xiàn)那就夠了,就可以繼續(xù)往下走演闭,我們畢竟不是專門研究方法學(xué)的不跟,也不可以尋求流程優(yōu)化,更多時候只要能解決問題就足夠了米碰,不需要走捷徑窝革,至少不用刻意追求最短距離。
我這里的文字多來自實際的科研生活需求吕座,這里比如我們研究泛癌中的差異基因虐译,以轉(zhuǎn)錄組為例吴趴,想探究一下不同癌種共有的差異基因或特有的癌基因漆诽,以作進(jìn)一步的機(jī)制挖掘或biomarker開發(fā)。那么兰英,當(dāng)我們得到一堆基因之后,可能是多個excel文件楞捂,這些excel文件具有相同的表頭薄坏,因此需要合并它們?yōu)橐粋€文件。再比如寨闹,同一單位中多個員工匯報工作時交上來的表格胶坠,領(lǐng)導(dǎo)想進(jìn)行簡單的統(tǒng)計分析,如看一下最大值鼻忠、最小值涵但、中位數(shù)、眾數(shù)等等帖蔓,也會用到這種場景。

1.把多個csv或xls合并成單個表頭相同的多行文件

首先瞳脓,如果你收集到的是csv格式的文件塑娇,是最好的,xls格式也可以劫侧,把它們放到一個文件夾埋酬,然后新建一個文本文件,編輯內(nèi)容為“Copy *.csv combine.csv”烧栋,保存文件名為"合并.bat"(即批處理文件)写妥,如果是xls文件則改寫為“Copy *.xls combine.xls”(實踐證明文件名如果設(shè)置為中文則不識別,所以用了“combine”)审姓,雙擊bat文件即可快速合并珍特。

那么,如果收集到的不是csv和xls格式魔吐,而是xlsx扎筒,那也沒關(guān)系,可以通過格式轉(zhuǎn)換為csv酬姆。我一開始想的是批量轉(zhuǎn)換文件名嗜桌,結(jié)果發(fā)現(xiàn),轉(zhuǎn)了之后沒有用辞色,說明不能通過單純修改后綴名的方法來解決骨宠。

2.關(guān)于把xlsx轉(zhuǎn)換為csv格式,這里介紹一種方法——

同樣把所有文件放到一個新建文件夾中(保險起見最好是英文路徑),同時在文件夾中新建一個excel文件层亿,打開該文件桦卒,按ALT+F11鍵或右擊sheet1工作表標(biāo)簽調(diào)出vb界面,“插入”》“模塊”棕所,粘貼以下代碼:

Sub SaveToCSVs()
    Dim fDir As String
    Dim wB As Workbook
    Dim wS As Worksheet
    Dim fPath As String
    Dim sPath As String
    fPath = "C:\Users\ms-off1\Desktop\temp\"
    sPath = "C:\Users\ms-off1\Desktop\temp\"
    fDir = Dir(fPath)
    Do While (fDir <> "")
        If Right(fDir, 4) = ".xls" Or Right(fDir, 5) = ".xlsx" Then
            On Error Resume Next
            Set wB = Workbooks.Open(fPath & fDir)
            'MsgBox (wB.Name)
            For Each wS In wB.Sheets
                wS.SaveAs sPath & wB.Name & ".csv", xlCSV
            Next wS
            wB.Close False
            Set wB = Nothing
        End If
        fDir = Dir
        On Error GoTo 0
    Loop
End Sub

其中闸盔,fPath 定義了存放Excel文件的路徑,sPath定義了csv文件的輸出位置琳省,根據(jù)個人情況進(jìn)行修改迎吵,不要忘記路徑最后的左斜線。上面的代碼也可以實現(xiàn)從xls到csv格式的轉(zhuǎn)換针贬。

到這里再重復(fù)上面的操作即可完成多個文件合并击费,故事就講完了。不過既然折騰桦他,那就多折騰一波:

3.怎么反過來把csv批量轉(zhuǎn)換成xlsx呢蔫巩?

同樣的操作,輸入下面代碼:

Sub CAVToXLSX()
    Dim fDir As String
    Dim wB As Workbook
    Dim wS As Worksheet
    Dim fPath As String
    Dim sPath As String
    fPath = "C:\Users\Micro\Desktop\source\"
    sPath = "C:\Users\Micro\Desktop\target\"
    fDir = Dir(fPath)
    Do While (fDir <> "")
        If Right(fDir, 4) = ".csv" Or Right(fDir, 5) = ".csv" Then
            On Error Resume Next
            Set wB = Workbooks.Open(fPath & fDir)
            'MsgBox (wB.Name)
            For Each wS In wB.Sheets
                wS.SaveAs sPath & wB.Name & ".xlsx" _
                , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
            Next wS
            wB.Close False
            Set wB = Nothing
        End If
        fDir = Dir
        On Error GoTo 0
    Loop
End Sub

同樣要注意修改文件路徑快压。
關(guān)于轉(zhuǎn)換xlsx到csv 文件轉(zhuǎn)換csv到xlsx文件圆仔,對應(yīng)的也有人提供了python代碼,現(xiàn)在我還不會蔫劣,姑且不用坪郭。

4.下面的小技巧是關(guān)于多個excel文件的合并,這種需求不是很多脉幢,可能有時候領(lǐng)導(dǎo)想看一批數(shù)據(jù)歪沃,又不想一個一個打開的時候,就用到啦嫌松。

這種情況下沪曙,你拿到很多個excel文件,也可能是csv文件萎羔,需要快速合成為一個文件液走,每個csv變成合成后文件中的一個sheet,sheet名為原來的文件名外驱。同樣可以利用VB編寫的宏來實現(xiàn)育灸,前面的操作都一樣(把所有文件放到一個新建文件夾,在里面新建excel文件昵宇,打開excel文件磅崭,調(diào)出vb窗口并新建模塊)代碼如下:

'功能:把多個excel工作簿的第一個sheet工作表合并到一個excel工作簿的多個sheet工作表,新工作表的名稱等于原工作簿的名稱

Sub Books2Sheets()
    '定義對話框變量
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    '新建一個工作簿
    Dim newwb As Workbook
    Set newwb = Workbooks.Add
    With fd
        If .Show = -1 Then
            '定義單個文件變量
            Dim vrtSelectedItem As Variant
            '定義循環(huán)變量
            Dim i As Integer
            i = 1
            '開始文件檢索
            For Each vrtSelectedItem In .SelectedItems
            '打開被合并工作簿
            Dim tempwb As Workbook
            Set tempwb = Workbooks.Open(vrtSelectedItem)
            '復(fù)制工作表
            tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)
            '把新工作簿的工作表名字改成被復(fù)制工作簿文件名瓦哎,這兒應(yīng)用于xls文件砸喻,即Excel97-2003的文件柔逼,如果是Excel2007,需要改成xlsx
            newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xls", "")
            '關(guān)閉被合并工作簿
            tempwb.Close SaveChanges:=False
            i = i + 1
            Next vrtSelectedItem
        End If
    End With
    Set fd = Nothing
End Sub

這時候點擊“運(yùn)行”按鈕割岛,或者按F5運(yùn)行的時候回彈出窗口讓你選擇文件愉适,你應(yīng)選擇要合并的多個文件,而不是新建的excel文件癣漆,就可以了维咸。你有幾個文件,就會閃幾下惠爽,最后全部合并完成(如果有十來個還好癌蓖,如果上百個,最好還是每10個或20個合并成一個吧婚肆,不然就算合并了一個個的點sheet也會很費(fèi)勁)

5.既然多個文件可以合并成多sheet的單個文件租副,那么反過來,如果一個excel文件有多個sheet较性,也可以拆分成多個單獨的文件用僧,每個文件只有一個sheet,文件名為sheet名赞咙,

用以下代碼(----拆分后格式為xlsx):

Sub SplitWorkbook()
    Dim workbookPath As String
    workbookPath = Application.ActiveWorkbook.Path
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each wSheet In ThisWorkbook.Sheets
        wSheet.Copy
        Application.ActiveWorkbook.SaveAs Filename:=workbookPath & "\" & wSheet.Name & ".xlsx"
        Application.ActiveWorkbook.Close False
    Next
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

或者

Private Sub 分拆工作表()
       Dim sht As Worksheet
       Dim MyBook As Workbook
       Set MyBook = ActiveWorkbook
       For Each sht In MyBook.Sheets
           sht.Copy
           ActiveWorkbook.SaveAs Filename:=MyBook.Path & "\" & sht.Name, FileFormat:=xlOpenXMLWorkbook     '將工作簿另存為xlsx格式
           ActiveWorkbook.Close
       Next
       MsgBox "文件已經(jīng)被分拆完畢!"

   End Sub

以上參考:
https://jingyan.baidu.com/article/3a2f7c2ea4809866afd611ed.html
https://jingyan.baidu.com/article/ca2d939d767a16eb6c31ce85.html
https://www.51wikihow.com/excel/how-to-split-workbooks-into-separate-files-in-excel.html
https://www.zhihu.com/question/39234324
https://blog.csdn.net/Gipsy_Danger/article/details/80142396
https://www.sohu.com/a/276904119_367376

6.此外责循,一開始提到的批量修改文件名

這個給你可能更常用攀操,方法也很簡單沼死,用excel完成:
在C盤新建一個temp文件夾(以后都在該文件夾下完成,養(yǎng)成好習(xí)慣)崔赌,在里邊新建一個名為“rename”的excel文件,內(nèi)容格式為:

image.png

再新建一個名為“ren”的bat文件耸别,里面內(nèi)容格式為(注意沒了表頭):

image.png

然后把要修改的文件扔到這個文件夾中健芭,雙擊bat文件就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秀姐,一起剝皮案震驚了整個濱河市慈迈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌省有,老刑警劉巖痒留,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蠢沿,居然都是意外死亡伸头,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門舷蟀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恤磷,“玉大人面哼,你說我怎么就攤上這事∩ú剑” “怎么了魔策?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長河胎。 經(jīng)常有香客問我闯袒,道長,這世上最難降的妖魔是什么游岳? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任政敢,我火速辦了婚禮,結(jié)果婚禮上吭历,老公的妹妹穿的比我還像新娘堕仔。我一直安慰自己,他們只是感情好晌区,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布摩骨。 她就那樣靜靜地躺著,像睡著了一般朗若。 火紅的嫁衣襯著肌膚如雪恼五。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天哭懈,我揣著相機(jī)與錄音灾馒,去河邊找鬼。 笑死遣总,一個胖子當(dāng)著我的面吹牛睬罗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旭斥,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼容达,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了垂券?” 一聲冷哼從身側(cè)響起花盐,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菇爪,沒想到半個月后算芯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡凳宙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年熙揍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片近速。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡诈嘿,死狀恐怖堪旧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奖亚,我是刑警寧澤淳梦,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站昔字,受9級特大地震影響爆袍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜作郭,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一陨囊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夹攒,春花似錦蜘醋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至编检,卻和暖如春胎食,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背允懂。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工厕怜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蕾总。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓粥航,卻偏偏與公主長得像,于是被迫代替她去往敵國和親生百。 傳聞我的和親對象是個殘疾皇子躁锡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容