【问题标题】:How to convert Excel file with multiple sheets to a set of TSV files?如何将具有多个工作表的 Excel 文件转换为一组 TSV 文件?
【发布时间】:2017-05-29 03:54:30
【问题描述】:

在下面的代码中,cconvert excel 文件与多张工作表到 Tsv 文件中添加了什么附加 clde。

注意:下面的代码将一个带有一张表的excel文件转换为Tsv。它不处理一个带有多张表的excel表

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

【问题讨论】:

  • 一种可能性是创建一个临时工作簿copy each sheet to it,将其保存到tsv,然后在完成后将其丢弃而不保存。

标签: c# excel vb.net ssis vb.net-2010


【解决方案1】:

您可以为该任务使用Microsoft.Office.Interop.Excel(请注意,您需要先引用该命名空间)。

正如@stuartd 建议的那样,您可以创建一个汇总工作表,其中将根据您的工作表结构包含所有工作表(请参阅我在代码中的评论) 或者(如果它适合您的需要)您可以使用 For Each 循环将每个工作表保存在不同的 tsv 文件中。
这是一个经过测试的示例,显示了其原理:

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

【讨论】:

  • 谢谢。那么,在执行代码之前,代码需要所有工作表的名称吗?
  • 我在 SSIS(脚本任务)中使用 Micrsoft Visual basic 2012。当我使用以下导入时,它显示,导入中的命名空间,导入 Microsoft.Office.Interop 导入 Microsoft.Office.Interop .Excel 不包含任何公共成员
  • 添加了来自 com 部分 内部引用的引用?换句话说,您是否做到了:右键单击项目>>添加参考>>单击 COM>>检查 Microsoft Excel x.0 对象库>>确定?
  • 好的,现在我看到您在 SSIS 中使用“Micrsoft Visual Basic 2012”我从未在 ssis 上使用过 Visual Basic,但我想它不像 Visual Studio 那样灵活,你不能使用 Visual Studio 使用 vb.net 吗?还发现:social.msdn.microsoft.com/Forums/sqlserver/en-US/…
  • 因此您可以使用与您在问题中编写的“VBA LIKE”语法相同的逻辑,但请记住使用oExcel.Quit() 终止每个进程并在您打开的每个工作簿上声明一个新应用程序跨度>
猜你喜欢
  • 1970-01-01
  • 2020-11-27
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2018-04-28
相关资源
最近更新 更多