2017-01-12 1 views
0

xls을 tsv 파일로 변환하는 vb.net 스크립트 (SSIS ETL의 일부로) 작성. 공백 Imports Microsoft.Excel에 아래 코드를 포함하려고했습니다. 그러나 , 그것은 아무런 같은 이름 공간이 없다는 것을 보여줍니다! 어떤 이름 공간 엑셀 개폐를 사용하고 vb.net의 일환으로 기능으로 저장을 포함 할 oExcel.Workbooks.Open oBook.SaveAs (sTsvPath, -4158)VB.net에서 사용할 이름 공간

vb.net 코드 is

Public Sub Main() 

     Dim oExcel As Object 
     Dim oBook As Object 

     Dim sFileName As String 
     Dim sFileNameOnly As String 


     Dim sXlsPath As String 
     Dim sTsvPath As String 



     sFileName = CStr(Dts.Variables("User::Xls_File_Name").Value) 


     sXlsPath = "H:\Xls_Files\" + sFileName 

     sFileNameOnly = Path.GetFileNameWithoutExtension(sFileName) 

     sTsvPath = "H:\Xls_Files\" + sFileNameOnly + ".Txt" 


     oExcel = CreateObject("Excel.Application") 


     oBook = oExcel.Workbooks.Open(sXlsPath) 

     oBook.SaveAs(sTsvPath, -4158) 

     oBook.Close(False) 

     oExcel.Quit() 

     Dts.TaskResult = ScriptResults.Success 
    End Sub 
+1

"vb.net excel namespace"를 검색해 보셨습니까? 힌트 : Interop을 원합니다. –

+0

그렇습니다. Microsoft.Office.Interop.Excel 네임 스페이스 은 Microsoft office에만 적용 가능하며 VB에서는 적용되지 않습니다 – user1254579

+0

이것은 .Net에 내장되어 있지 않습니다. Excel을 컴퓨터에 설치해야하며 interop 어셈블리를 사용하여 Excel 인스턴스를 열고 원하는 작업을 수행해야합니다. 예, 실제로 Excel을 시작한다는 의미입니다. –

답변

1

먼저 Solution Explorer 창에서 Microsoft Excel 15.0 Object Library에 대한 참조를 추가해야합니다. '참조 추가 ...'를 선택하면 COM 개체 탭에 나타납니다. 버전 번호 (예 : 15.0)가 다를 수 있습니다.

다음 코드에서이 같은 Imports Microsoft.Office.Interop.Excel을 추가해야합니다 :

Option Infer On 
Option Strict On 

Imports System.IO 
Imports Microsoft.Office.Interop.Excel 

Module Module1 

    Sub Main() 

     Dim srcDir = "C:\temp" 
     Dim srcFilename = "somefile.xls" 
     Dim destFile = Path.Combine(srcDir, Path.GetFileNameWithoutExtension(srcFilename) & ".txt") 

     File.Delete(destFile) 

     Dim excel As Application = Nothing 
     Dim wb As Workbook = Nothing 

     Try 
      excel = New Application 
      wb = excel.Workbooks.Open(Path.Combine(srcDir, srcFilename)) 
      wb.SaveAs(destFile, XlFileFormat.xlCurrentPlatformText) 

     Finally 
      If wb IsNot Nothing Then 
       wb.Close() 
      End If 
      If excel IsNot Nothing Then 
       excel.Quit() 
      End If 

      ' see "The proper way to dispose Excel com object using VB.NET?" 
      ' http://stackoverflow.com/a/38111107/1115360 for an explanation of the following: 
      GC.Collect() 
      GC.WaitForPendingFinalizers() 
      GC.Collect() 
      GC.WaitForPendingFinalizers() 

     End Try 

    End Sub 

End Module 

당신은 DTS-관련 부품을 추가해야합니다.

더 나은 품질의 코드로 수행 할 Path.GetExtensionPath.ChangeExtension을 사용하는 대신 간략하게 Path.Combine(srcDir, Path.GetFileNameWithoutExtension(srcFilename) & ".txt")을 사용했습니다. 또한 Try..CatchFile.Delete을 입력하고에 적절한 조치를 취해야합니다.