2017-01-13 1 views
1

Какое дополнение clde будет добавлено в cconvert excel файл с несколькими листами в файл Tsv в приведенном ниже коде.Как преобразовать файл Excel с несколькими листами в набор TSV-файлов?

Примечание: Код ниже конвертировать Excel файл с одного листа на Tsv.It не обрабатывать лист первенствовать с несколькими листа

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) 
    enter code here 
     oExcel.Quit() 

     Dts.TaskResult = ScriptResults.Success 
    End Sub 
+0

Одним из возможных вариантов было бы создать царапанию книгу, [копировать каждый лист к нему] (http://stackoverflow.com/questions/14734578/ c-sharp-excel-save-each-worksheet-to-the-new-workbook), сохраните его до 'tsv', а затем после завершения, отбросьте его без сохранения. – stuartd

ответ

1

вы можете использовать Microsoft.Office.Interop.Excel для выполнения этой задачи (обратите внимание, что вы должны ссылаться это пространство имен сначала).

Как @stuartd предлагает создать сводную таблицу, которая будет содержать все листы в соответствии со структурой ваших листов (см. Мой комментарий внутри кода) или, альтернативно (если это соответствует вашим потребностям), вы можете сохранить каждый рабочий лист на другой файл tsv, используя цикл For Each.
здесь испытанный пример, который показывает, что принцип:

Imports Microsoft.Office.Interop 
Imports Microsoft.Office.Interop.Excel 

    Public Sub Main() 
      Dim xlApp As New Excel.Application 
      Dim xlWorkBook As Excel.Workbook 
      Dim xlWorkSheet As Excel.Worksheet 
      xlApp.Visible = False 

      ' create a new workbook (you can open existing workbooks using the Open() method) ' 
      xlWorkBook = xlApp.Workbooks.Add() 
      ' create sheet 1 ' 
      xlWorkSheet = xlWorkBook.Worksheets.Add() 
      xlWorkSheet.Name = "ws1" 
      xlWorkSheet.Range("a1").Value = "hello from worksheet1" 
      ' create sheet 2 ' 
      xlWorkSheet = xlWorkBook.Worksheets.Add() 
      xlWorkSheet.Name = "ws2" 
      xlWorkSheet.Range("a1").Value = "hello from worksheet2" 
      ' worksheet that contain both worksheets ' 
      xlWorkSheet = xlWorkBook.Worksheets.Add() 
      xlWorkSheet.Name = "summary" 

      ' paste all sheets data inside the summary sheets (i dont know how your excel sheets are structured but you can select entire ranges and arrange them on the summary worksheet) ' 
      Dim counter As Int16 = 1 
      For Each w As Worksheet In xlWorkBook.Worksheets 
       If w.Name <> "summary" Then 
        xlWorkSheet.Cells(counter, 1) = w.Range("a1") 
        counter += 1 
       End If 
      Next 
      xlApp.DisplayAlerts = False 
      ' save as tsv file ' 
      xlWorkBook.SaveAs("c:\xxx\xxx\Book4.tsv", XlFileFormat.xlTextWindows, CreateBackup:=False) 
     End Sub 
+0

Спасибо за это. Итак, код, ожидающий имени всех листов перед выполнением кода? – user1254579

+0

Я использую Micrsoft Visual Basic 2012 в SSIS (задача скрипта). Когда я использую импорт ниже, он показывает пространство имен в импорте, Импортирует Microsoft.Office.Interop Импорт Microsoft.Office.Interop.Excel не содержит public memebr – user1254579

+0

ссылка на * ком раздел * внутренние ссылки были добавлены? другими словами, вы сделали это: щелкните правой кнопкой мыши по проекту >> добавьте ссылку >> нажмите на COM >> проверьте библиотеку объектов Microsoft Excel x.0 >> ОК? – jonathana

Смежные вопросы