2017-02-06 2 views
0

테스트 스크립트 (XML)가 있고 Excel 시트의 번역이 필요합니다. Excel 시트에서 영어로 단어를 검색하고 독일어, 프랑스어 및 이탈리아어로 번역합니다. 나는 프랑스어 단어에 문제가있다.Excel 데이터에서 XML로 잘못된 단어가 출력됩니다.

IMAGE

나는 에서 VBA을 매크로를 사용하고 있습니다. 영어로 된 해당 단어를 찾을 때 찾기을 사용하고 있습니다. Excel 시트에서 프랑스어 단어를 찾았을 때 문자열에 int를 저장하는 중입니다. 기본적으로

CODE

If intChoice <> 0 Then 

strPath = Application.FileDialog(_ 
msoFileDialogOpen).SelectedItems(1) 

Dim strFolderPath As String 
strFolderPath = Left(strPath, Len(strPath) - 4) 
Set fGermanOutputFile = fso.CreateTextFile((strFolderPath & "_German.xml")) 
Set fItalianOutputFile = fso.CreateTextFile((strFolderPath & "_Italian.xml")) 
Set fFrenchOutputFile = fso.CreateTextFile((strFolderPath & "_French.xml")) 

    Open strPath For Input As #1 


Do Until EOF(1) 
    Line Input #1, strLine 

    intLastFoundChar = 0 

    strGermanLine = "" 
    strFrenchLine = "" 
    strItalianLine = "" 

    For intI = 0 To (UBound(ArrStrOpeningTags, 1) - 1) 

     intFoundString = InStr(strLine, ArrStrOpeningTags(intI)) 
     If intFoundString <> 0 Then 
      intI = 3 
     End If 

    Next intI 

    If intFoundString <> 0 Then 

     For intJ = 0 To (UBound(ArrStrParamsToReplace) - 1) 


      strLine = Right(strLine, Len(strLine) - intLastFoundChar) 

      strStringToLookFor = (ArrStrParamsToReplace(intJ) & "=""") 

      intFoundString = InStr(1, strLine, strStringToLookFor, vbBinaryCompare) 

      If intFoundString <> 0 Then 
       intStringSplitIndex = (intFoundString + Len(strStringToLookFor)) 

       strStringToLookFor = Right(strLine, Len(strLine) - intStringSplitIndex + 1) 


       strDummyString = Left(strLine, intStringSplitIndex - 1) 
       strGermanLine = strGermanLine & strDummyString 
       strFrenchLine = strFrenchLine & strDummyString 
       strItalianLine = strItalianLine & strDummyString 

       intLastFoundChar = intLastFoundChar + intStringSplitIndex 


       intFoundString = InStr(strStringToLookFor, """") 

       If intFoundString <> 0 Then 

        strStringToLookFor = Left(strStringToLookFor, intFoundString - 1) 


        Set rngFoundString = rngEnglishDictionary.Find(strStringToLookFor) 


        If (rngFoundString Is Nothing) Then 
         Debug.Print "String " & strStringToLookFor & " not found!" 


         strGermanLine = strGermanLine & strStringToLookFor & """" 
         strFrenchLine = strFrenchLine & strStringToLookFor & """" 
         strItalianLine = strItalianLine & strStringToLookFor & """" 
        Else 

         intWordToReplaceIndex = rngEnglishDictionary.Find(strStringToLookFor).Row - rngEnglishDictionary.Row + 1 


         strGermanLine = strGermanLine & rngGermanDictionary(intWordToReplaceIndex) & """" 
         strFrenchLine = strFrenchLine & rngFrenchDictionary(intWordToReplaceIndex) & """" 
         strItalianLine = strItalianLine & rngItalianDictionary(intWordToReplaceIndex) & """" 
        End If 

        intLastFoundChar = intLastFoundChar + Len(strStringToLookFor) 
       End If 
      End If 

     Next intJ    

    Else 

    strGermanLine = strLine 
    strFrenchLine = strLine 
    strItalianLine = strLine 

    End If      

    fGermanOutputFile.WriteLine (strGermanLine & vbCrLn) 
    fFrenchOutputFile.WriteLine (strFrenchLine & vbCrLn) 
    fItalianOutputFile.WriteLine (strItalianLine & vbCrLn) 

    strGermanLine = "" 
    strFrenchLine = "" 
    strItalianLine = ""   
Loop 
End If 
+0

사이트에 오신 것을 환영합니다! 코드를 게시 할 수 있습니까? 좋은 [소개는 여기에] –

+0

정말 고마워 ... 내가 정말로 잃어 버렸기 때문에. 나는 VBA에 익숙하지 않고이 코드조차도 어려웠다. 나를. 이제이 인코딩 문제를 어떻게 다룰 지 모르겠습니다. 그리고 btw, 내가 직접 이미지를 여기에 넣을 수 있을까요? (한 명의 사회자가 전에 내 첫 번째 게시물에서 변경) –

+0

도와 드리겠습니다. rngFrenchDictionary를 사용하고있는 초기 얼 굴이 어디에 집중할 것입니까? 이 사전에서 외부 구성 요소를 호출하고 있습니까? windows-1552는 많은 오래된 구성 요소의 기본 인코딩입니다. 문자가 올바르게 나오지 않는 예를 들어 줄 수 있습니까? –

답변

1

이있는 CreateTextFile는 ASCII 인코딩 파일을 만듭니다. 이 UTF-8로 저장해야하기 위해, 우리는

Set fGermanOutputFile = fso.CreateTextFile((strFolderPath & "_German.xml"), True, True) 
Set fItalianOutputFile = fso.CreateTextFile((strFolderPath & "_Italian.xml"), True, True) 
Set fFrenchOutputFile = fso.CreateTextFile((strFolderPath & "_French.xml"), True, True) 

1은 파일 이름, 텍스트 파일을 만들 때이 설정해야합니다, 두번째 인수는 "덮어 쓰기"에 대한 사실이며, 제 3 인수에 True입니다 "유니 코드"대 "ASCII"를 사용하십시오. According to this

+1

대단히 감사합니다! 그것은 지금 일하고있다! 너 내가 얼마나 행복한 지조차 알지 못한다! –