2012-05-14 84 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

您可能已经注意到这是一个*编程*网站。用户正在询问他正在创建的程序中是否这样做;不与另一个程序。 –

相关问题