不要告訴我改後綴。。。杜絕亂碼

普通情形:打開空白xls導入csv,接著調編碼再多幾個選項設置,纔出來正常數據。一兩個耗時不多,但,大量轉換時,一個一個來,抓狂。求,有什麼簡便的方法可以直接將csv轉換成正常數據的xls?


啊,本智障終於有機會輸出有價值的答案了。最近我遇到了和題主類似的問題,即需要將一批.csv文件轉換為.xlsx文件。但本智障一開始用的是最簡單的辦法,即將一個個.csv文件打開後再另存為.xlsx文件,但隨著文件數的增多,實在是受不了這種重複操作了,於是今天上網看看能否利用編程之類的方法解決該問題,下面開始正文。

本智障找到的第一個比較成功的方法如下,鏈接:

https://jingyan.baidu.com/article/6b97984deabfbc1ca2b0bfee.html?

jingyan.baidu.com

使用的是Excel的宏功能,使用前需要把.csv文件先整理到一個文件夾中,宏中的代碼如下:

ChDir "C:UsersAdministratorDesktop新建文件夾"
Dim sDir As String
Dim curdir As String
curdir = "C:UsersAdministratorDesktop新建文件夾"
sDir = Dir(curdir "*.csv")
While Len(sDir)
Workbooks.Open Filename:=curdir "" sDir
Dim temp As String
temp = Left(sDir, Len(sDir) - 4)
ActiveWorkbook.SaveAs Filename:=curdir "" temp ".xls", _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir
Wend

通過在文件中新建Excel表,再將該代碼複製到Excel的宏中,即可成功地文件夾中的.csv文件轉換為.xls文件,其實到這一步對於本智障已經基本夠用了。但本智障的理想目標還是想將.csv文件全部轉換為.xlsx格式,於是本智障自作聰明的將上述代碼中

ActiveWorkbook.SaveAs Filename:=curdir "" temp ".xls", _ 中的.xls換為了.xlsx。粘貼到宏中發現,居然可以運行!文件夾中也出現了相應的.xlsx文件。但當我興緻勃勃地點開文件時,卻彈出「本文件已損環或格式不匹配」的提示,並且文件中是空白的一片。本智障十分氣餒並打算放棄時,卻發現了ZH-ST的答案,十分高興

如何快速批量將csv轉換成excel文件??

www.zhihu.com圖標

然而,當我按答主的答案粘貼到宏中運行時,卻發現無法運行,但看ZH-ST答主對自己的答案十分有信心,我還是相信他的答案是大體正確的。於是我將ZH-ST答主的代碼與百度經驗中的代碼進行對比,尋找問題,後發現兩段代碼中都有這樣一段

ActiveWorkbook.SaveAs Filename:=curdir "" temp ".xls", _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir
ActiveWorkbook.SaveAs Filename:=curdir "" temp ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir

本智障認為這應該是與文件保存有關的操作,仔細對比後,恍然大悟,原來本智障將第一段代碼中的.xls換為.xlsx還是不夠的。還應該選擇保存文件的格式,第一段代碼中的FileFormat:=xlExcel8中的xlExcel8應該是.xls文件格式的對應代碼。而我若要保存為.xlsx格式,則還應將xlExcel8替換成.xlsx格式對應的文件代碼,通過ZH-ST答主的答案,我猜測.xlsx格式的文件代碼應為xlOpenXMLWorkbook。於是我將百度經驗中的代碼重新修正為

ChDir "C:UsersAdministratorDesktop新建文件夾"
Dim sDir As String
Dim curdir As String
curdir = "C:UsersAdministratorDesktop新建文件夾"
sDir = Dir(curdir "*.csv")
While Len(sDir)
Workbooks.Open Filename:=curdir "" sDir
Dim temp As String
temp = Left(sDir, Len(sDir) - 4)
ActiveWorkbook.SaveAs Filename:=curdir "" temp ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir
Wend

再粘貼到Excel中的宏中運行,成功的將所有.csv文件轉換為.xlsx格式,並可以正常打開,不再提示文件損壞。雖然回頭再看這是個很不值一提的問題,但本智障之前從沒有用過Excel的宏,所以通過自己摸索解決這個問題,本智障還是挺高興的。


今天正好用到,其實一樓回答可以解決問題,我來給你補一點:

結合這個經驗文章

將其中代碼改為如下:

Sub CAVToXLSX()
Dim fDir As String
Dim wB As Workbook
Dim wS As Worksheet
Dim fPath As String
Dim sPath As String
fPath = "C:UsersMicroDesktopsource"
sPath = "C:UsersMicroDesktop arget"
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

office2016親測可用;使用時注意源文件夾與目標文件夾,最後的「」不要丟


import pandas as pd

url= [文件路徑1,文件路徑2]
filename= [name1,name2]
for _ in url:
filecsv= pd.read_csv(_)
name= filename[url.index(_)]
filecsv.to_excel(str(name) + .xlsx,encoding= gbk)


#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import pandas as pd

import os

path=rF:Idata_package

files=[]# 遍歷所有文件路徑,並將結果儲存於filesfor root, _, names in os.walk(path):

for name in names:

files.append(os.path.join(root,name))for file in files: df=pd.read_csv(file) # 獲取文件名,並生成csv格式的文件名用於導出 (filepath, tempfilename) = os.path.split(file) (filename, extension) = os.path.splitext(tempfilename) output=path + "\%s.xlsx" % filename # 生成導出的文件名稱csv格式 df.to_excel(output)


可以參考以下方法:用office2007中自帶的宏編程

所有的CSV文件必須在同一個目錄下.

步驟:

  1. 在這個目錄下新建一個excel文件

2. 點擊工具欄(tools)-》宏(macro)-》visual basic editor -》view-》code 複製下列代碼,加粗的部分為需要轉格式的文件的位置

3.點擊菜單欄的run,即可運行經測試,該段代碼使用的是word2007版及以上,03版得不適用Sub 宏1() 宏1 宏

ChDir "C:Documents and SettingsAdministratorDesktopshopper" Dim sDir As String Dim curdir As String curdir = "C:Documents and SettingsAdministratorDesktopshopper" sDir = Dir(curdir "*.csv") While Len(sDir) Workbooks.Open Filename:=curdir "" sDir Dim temp As String temp = Left(sDir, Len(sDir) - 4)

ActiveWorkbook.SaveAs Filename:=curdir "" temp ".xls", _

FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ActiveWorkbook.Close sDir = Dir WendEnd Sub
請問你知道方法了嗎,我怎麼還是亂碼啊,按照前面評論的方法
編程,c#方便,讀csv簡單reference裏搜索excel,添加引用,就能寫xlxs了


使用power query


推薦閱讀:
查看原文 >>
相關文章