2012-05-14 83 views
0

我一直在掙扎了一段時間與Excel中的疑難問題有俄文字符在我的Excel文件(2003年版),我想將其保存到一個csv.But問題是,每當我這樣做,而不是俄語字符我的變得??????。經過各種論壇後,我發現問題在於MS Excel。如何使用UTF-8編碼將excel文件保存爲csv?

所以現在我在想,如果我可以寫VB腳本這將讀取所需要的細胞中的琴絃,他們變相爲UTF-8編碼並將其存儲在一個文本文件中。我在這裏有兩個問題:

  1. 我的解決方案是否可行?我不知道它是否可以完成?任何指針都會幫助完整。我通過網絡拖網,找不到任何東西。

  2. ,就像我跟VB腳本完全爲零,可一些身體幫我一個示例代碼嗎?

最重要的是,如果有人知道更好的方法,請讓我知道。

感謝 斯潘基


我已經經歷了薩爾曼的代碼了,並試圖在我的Excel文件(嵌入了)。我正在面對一些probs,並在網絡搜索後對其進行了一些修改。修改後的代碼如下:

Sub test() 

    'Modified lines 
    Dim CONNECTION1 As New ADODB.Connection 
    Set CONNECTION1 = New ADODB.Connection 
    'Set CONNECTION1 = WScript.CreateObject("ADODB.CONNECTION") 
    'Modified line 
    CONNECTION1.Open "Provider=MICROSOFT.JET.OLEDB.4.0;Data Source=c:\Documents and Settings\bht1kor \Desktop  \test.xls;Extended Properties=""Excel 8.0;HDR=Yes;""" 


    Dim RECORDSET1 As New ADODB.Connection 
    Set RECORDSET1 = New ADODB.Connection 
    'commented the line 
    'WScript.CreateObject ("ADODB.RECORDSET") 
    RECORDSET1.Open CONNECTION1 ', 3, 1 
    Set rs1 = RECORDSET1.Execute("SELECT * FROM [Sheet1$]") 

    ' Notes: 
    ' CharacterSet 65001 is UTF-8 
    ' add/remove columns and change datatype to match you excel file 


    Dim CONNECTION2 As New ADODB.Connection 
    Set CONNECTION2 = New ADODB.Connection 
    'commented the line 
    'Set CONNECTION2 = WScript.CreateObject("ADODB.CONNECTION") 
    CONNECTION2.Open "Provider=MICROSOFT.JET.OLEDB.4.0;Data Source=c:\Documents and Settings\bht1kor\Desktop\;Extended Properties=""text;HDR=Yes;FMT=Delimited;CharacterSet=65001;""" 
    CONNECTION2.Execute "CREATE TABLE [output.csv] ([English] VARCHAR(200), [Swedish] VARCHAR(200), [Russian] VARCHAR(200), [Chinese Simplified] VARCHAR(200))" 


    Dim RECORDSET2 As New ADODB.Connection 
    Set RECORDSET2 = New ADODB.Connection 
    'commented the line 
    'Set RECORDSET2 = WScript.CreateObject("ADODB.RECORDSET") 
    RECORDSET2.Open CONNECTION2, adOpenKeyset, adLockOptimistic 

    'Do Until RECORDSET1.EOF 
    RECORDSET2.AddNew 
    Dim i 
    For i = 0 To RECORDSET1.Fields.Count - 1 
    'comented the line 
    'WScript.Echo RECORDSET1.Fields(i).Value 
    RECORDSET2.Fields(i).Value = RECORDSET1.Fields(i).Value 
    Next 
    RECORDSET2.Update 
    RECORDSET1.MoveNext 
    Loop 
    End Sub 

我在運行此代碼時仍遇到問題。運行下面的線,而:

RECORDSET2.Open連接2,adOpenKeyset,ADLOCKOPTIMISTIC

它給一個運行時錯誤「無法啓動application.The工作組文件丟失或完全由其他用戶打開」。我幾乎被這個難住了。有任何想法嗎。對我來說,它看起來像probs與數據源。 注意: - 我沒有安裝MS訪問。

+0

相關:http://stackoverflow.com/questions/4221176/excel-to-csv-with-utf8-encoding – Tomalak

+0

你真的想要一個VB腳本解決方案嗎?如果excel save-as命令可以做到這一點,該怎麼辦? –

+0

@Salman我很確定他的意思是VBA。另外,從另一個問題可以看出,「另存爲」並不能解決問題。 – Tomalak

回答

3

下面是一個使用ADO於(i)讀取的excel文件一點的VBScript(ⅱ)寫到CSV文件:

option explicit 

' Reading Excel Files: 
' http://support.microsoft.com/kb/257819 

dim CONNECTION1 
set CONNECTION1 = WScript.CreateObject("ADODB.CONNECTION") 
CONNECTION1.Open "Provider=MICROSOFT.JET.OLEDB.4.0;Data Source=C:\Users\Salman\Desktop\input.xls;Extended Properties=""Excel 8.0;HDR=Yes;""" 

dim RECORDSET1 
set RECORDSET1 = WScript.CreateObject("ADODB.RECORDSET") 
RECORDSET1.open "SELECT * FROM [Sheet1$]", CONNECTION1, 3, 1 

' Notes: 
' CharacterSet 65001 is UTF-8 
' add/remove columns and change datatype to match you excel file 

dim CONNECTION2 
set CONNECTION2 = WScript.CreateObject("ADODB.CONNECTION") 
CONNECTION2.Open "Provider=MICROSOFT.JET.OLEDB.4.0;Data Source=C:\Users\Salman\Desktop\;Extended Properties=""text;HDR=Yes;FMT=Delimited;CharacterSet=65001;""" 
CONNECTION2.Execute "CREATE TABLE [output.csv] ([English] VARCHAR(200), [Swedish] VARCHAR(200), [Russian] VARCHAR(200), [Chinese Simplified] VARCHAR(200))" 

dim RECORDSET2 
set RECORDSET2 = WScript.CreateObject("ADODB.RECORDSET") 
RECORDSET2.Open "SELECT * FROM [output.csv]", CONNECTION2, 2, 2 

do until RECORDSET1.EOF 
    RECORDSET2.AddNew 
    dim i 
    for i = 0 to RECORDSET1.Fields.Count - 1 
     WScript.Echo RECORDSET1.Fields(i).Value 
     RECORDSET2.Fields(i).Value = RECORDSET1.Fields(i).Value 
    next 
    RECORDSET2.Update 
    RECORDSET1.MoveNext 
loop 

實施例的Excel文件內容(Excel 2003中):

English   Swedish   Russian    Chinese Simplified 
this should work Detta bör fungera это должно работать 這應該工作 
this should work Detta bör fungera это должно работать 這應該工作 
this should work Detta bör fungera это должно работать 這應該工作 
this should work Detta bör fungera это должно работать 這應該工作 

實施例CSV文件內容(UTF-8無BOM):使用CSCRIPT

"English","Swedish","Russian","Chinese Simplified" 
"this should work","Detta bör fungera","это должно работать","這應該工作" 
"this should work","Detta bör fungera","это должно работать","這應該工作" 
"this should work","Detta bör fungera","это должно работать","這應該工作" 
"this should work","Detta bör fungera","это должно работать","這應該工作" 

運行從命令行此腳本:

C:\>cscript export.vbs 

注意:您可能會遇到在64位Windows下面的ADO錯誤:

ADODB.Connection:供應商無法找到。可能安裝不正確 。 (錯誤代碼0x800A0E7A)

此問題的解決方法是以32位模式運行腳本。您可以通過在運行對話框中輸入以下命令,啓動32位命令提示符下做到這一點:

%WINDIR%\SysWOW64\cmd.exe 

從這個命令提示符下執行cscript命令。

+0

非常感謝好友!!!我會試試這個腳本,看看它是否有效。正如我告訴你在VBA中完全爲零,需要一些時間來解決它。 – spanky

+0

@spanky:如果您在運行代碼時遇到問題,請將它們發佈爲評論(而不是回答)。 –

+0

運行此代碼時,我仍然遇到問題。同時運行以下行: RECORDSET2.Open CONNECTION2,adOpenKeyset,adLockOptimistic 它給出運行時錯誤「無法啓動您的應用程序。工作組文件丟失或僅由其他用戶打開」。我幾乎被這個難住了。有任何想法嗎。對我來說,它看起來像probs與數據源。注意 – spanky

-1

Open Office可以做到這一點!嘗試將您的Excel文件加載到Open Office中並「另存爲」csv文件。然後您將被要求輸入導出文件的編碼。選擇「Unicode(UTF-8)」。

+1

您可能已經注意到這是一個*編程*網站。用戶正在詢問他正在創建的程序中是否這樣做;不與另一個程序。 –

相關問題