2017-01-12 13 views
0

xlsをtsvファイルに変換するvb.netスクリプト(SSIS ETLの一部として)を作成しています。 スペースImports Microsoft.Excelには以下のコードを含めるようにしました。 、それは のような名前空間がないことを示す!どのような名前スペースエクセルオープンクローズを使用してvb.netの一環として 機能として保存するために含まれる oExcel.Workbooks.Open oBook.SaveAs(sTsvPath、-4158)VB.netで使用する名前空間。

vb.netコード

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

まず、ソリューションエクスプローラーウィンドウでMicrosoft Excel 15.0オブジェクトライブラリへの参照を追加する必要があります。 [参照の追加]を選択すると、[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..Catchに入れて、Catchに適切な処置を加えてください。

関連する問題