.NET 复制EXCEL中的某几个SHEET后,被复制的SHEET 另存为一个单独的EXCEL文件

时间:2022-04-26 19:58:35
.NET 复制EXCEL中的某几个SHEET后,被复制的SHEET 另存为一个单独的EXCEL文件
例如


excle1.xls  包含了  sht1,sht2,sht3,sht4,sht5,sh56 这6个sheet
结果程序操作我想得到这样的几个EXCLE 文件
文件名{sheet}
excel_sht2,xls { sht1,sht2}

excel_sht3,xls {sht1,sht3}

excel_sht4,xls {sht1,sht4}

excel_sht5,xls {sht1,sht5}

excel_sht6,xls {sht1,sht6}

做这个主要是单位上的小妹儿每天贴这个要贴100多次,看不下去了。 各位帮帮忙,帮了有小妹的干活。

下面的EXCEL 类是也 坛子里扒来的,具体是那个忘记了。。。。添了些。
还差些,有用的话算是个方向。
还请各位达达 出把力。


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

Public Class XlsIO

    Private objXls As Application
    Private objWbk As Workbook
    Private objSht As Worksheet
    Private objShts As Worksheets
    Private sheetname As String



    Public Function Open(ByVal strFileName As String) As Boolean

        Try
            If File.Exists(strFileName) = False Then
                Return False
            End If

            objXls = New Application()
            'Visble
            objXls.Visible = False


            objWbk = objXls.Workbooks.Open(strFileName)

            objShts = objWbk.Worksheets()

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Public Function Add(ByVal strFileName As String) As Boolean

        Try
            If File.Exists(strFileName) = False Then
                Return False
            Else
                objXls = New Application()
                'Visble
                objXls.Visible = False
                objWbk = objXls.Workbooks.Add(strFileName)
                objShts = objWbk.Sheets
                Return True
            End If
        Catch ex As Exception
            Return False
        End Try

    End Function
    Public Function GetSheetName() As ListBox

        ' m_ListBox = m_ComboBox
        Return Nothing

    End Function
    Public Function Save() As Boolean

        Try
            objWbk.Save()

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function
    Public Function SaveAs(ByVal filename As String) As Boolean
        '40 工作表另存为 myexcel.ActiveWorkbook.saveas("C:\book2.xls") 
        Try
            objWbk.SaveAs(filename)
        Catch ex As Exception
            Return False
        End Try
    End Function


    Public Function Auto_Save(ByVal filename As String) As Boolean

        ' Application.DisplayAlerts = False
        objXls.DisplayAlerts = False
        ' ActiveWorkbook.Close(savechanges:=True, Filename:="文件名.xls")
        objWbk.Close(SaveChanges:=True)
        objXls.DisplayAlerts = True
        ' Application.DisplayAlerts = True
    End Function


    Public Function DeleteSheet(ByVal SheetName As String) As Boolean
        'objSht = objShts(SheetName)
        'objSht.Delete()
        With objWbk

            objSht = .Sheets(SheetName)
            objSht.Delete()
        End With
        Return True
    End Function

    Public Function ActiveSheet(ByVal SheetName As String) As Worksheet
        '装载激活待复制的页面
    End Function

    Public Function CopySheet(ByVal SheetName As String) As Worksheet
        '复制到另外一个EXCEL里去
    End Function
    Public Function AddSheet(ByVal SheetName As String) As Worksheet
   ’直接ADD到另外一个EXCEL里去
    End Function


    Public Function Close() As Boolean

        Try
            If Not objSht Is Nothing Then
                objSht = Nothing
            End If

            If Not objWbk Is Nothing Then
                objWbk.Close()
            End If

            If Not objXls Is Nothing Then
                objXls.Quit()
            End If

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Public Function GetCellValue(ByVal intShtIdx As Integer, ByVal intRow As Integer, ByVal intCol As Integer) As String

        With objWbk

            objSht = .Sheets(intShtIdx)
            Return objSht.Cells(intRow, intCol).value

        End With

    End Function

    Public Function SetCellValue(ByVal intShtIdx As Integer, ByVal intRow As Integer, ByVal intCol As Integer, ByVal value As String) As Boolean

        Try
            With objWbk

                objSht = .Sheets(intShtIdx)
                objSht.Cells(intRow, intCol) = value

            End With

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Public Function Preview() As Boolean

        Try
            'objSht.PrintPreview(False)

            objWbk.PrintPreview(False)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Public Function Print() As Boolean

        Try
            'objSht.PrintOut()
       
            objWbk.PrintOut()

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function
    Public Function ExcelQuit() As Boolean

        Try
      
            objXls.Application.DisplayAlerts = False
            objXls.ActiveWorkbook.Saved = False
            objXls.Workbooks.Close()
            objXls.Quit()


        Catch ex As Exception

        End Try
    End Function
 
End Class



 

7 个解决方案

#1


复制sheet1 的代码  (将sheet1复制了一次,然后移动到sheet1后面)

 Dim applicationClass As New ApplicationClass
        Dim workbook As Microsoft.Office.Interop.Excel.Workbook = Nothing
            workbook = applicationClass.Workbooks.Open("路径+文件名  ")
 workbook.Sheets(1).Select()
workbook.Sheets(1).Copy(After:=workbook.Sheets(1))
worksheet.SaveAs("路径+文件名  ")


然后是将sheet1 单独保存(将sheet1选中,然后复制到新excel)
 
workbook.Sheets(1).Select()
 worksheet.Copy()
  applicationClass.ActiveWorkbook.SaveAs("路径+文件名")

#2


引用 1 楼 stubble 的回复:
复制sheet1 的代码  (将sheet1复制了一次,然后移动到sheet1后面)

 Dim applicationClass As New ApplicationClass
        Dim workbook As Microsoft.Office.Interop.Excel.Workbook = Nothing
            workbook = applicationClass.Workbooks.Open("路径+文件名  ")
 workbook.Sheets(1).Select()
workbook.Sheets(1).Copy(After:=workbook.Sheets(1))
worksheet.SaveAs("路径+文件名  ")


然后是将sheet1 单独保存(将sheet1选中,然后复制到新excel)
 
workbook.Sheets(1).Select()
 worksheet.Copy()
  applicationClass.ActiveWorkbook.SaveAs("路径+文件名")


我就是有点没明白过来。 
worksheet.Copy() 如何复制2个表呢 
比如我第一个EXCEL文件要

sht1 ,sht2,sht3

第二个EXCEL文件要
sht1,sht2,sht4

这样

#3


worksheet.Copy()  只能复制一个sheet  
workbook.Sheets(“ 你想要复制的sheet的索引或者名字”).Select() 就是决定复制哪个sheet

你想复制多sheet   放在循环执行
比如复制 sht2    
就  workbook.Sheets(2).Select() 
  worksheet.Copy() 

感觉你的需求不是很难 ,上述代码可以实现。
只要你明白了原理  其实 你就知道该怎么做了 。

#4


引用 3 楼 stubble 的回复:
worksheet.Copy()  只能复制一个sheet  
workbook.Sheets(“ 你想要复制的sheet的索引或者名字”).Select() 就是决定复制哪个sheet

你想复制多sheet   放在循环执行
比如复制 sht2    
就  workbook.Sheets(2).Select() 
  worksheet.Copy() 

感觉你的需求不是很难 ,上述代码可以实现。
只要你明白了原理  其实 你就知道该怎么做了 。



哦哦  worksheet.Copy()  你的意思 每次这个以执行, 被选定复制的sheet就已经到了新的文档2里面去了。
我在select一个新的sheet 然后在copy的时候, 新的这个sheet 就又到新的文档2里面去 是这个意思咩?

#5


引用 4 楼 jadilee 的回复:
Quote: 引用 3 楼 stubble 的回复:

worksheet.Copy()  只能复制一个sheet  
workbook.Sheets(“ 你想要复制的sheet的索引或者名字”).Select() 就是决定复制哪个sheet

你想复制多sheet   放在循环执行
比如复制 sht2    
就  workbook.Sheets(2).Select() 
  worksheet.Copy() 

感觉你的需求不是很难 ,上述代码可以实现。
只要你明白了原理  其实 你就知道该怎么做了 。



哦哦  worksheet.Copy()  你的意思 每次这个以执行, 被选定复制的sheet就已经到了新的文档2里面去了。
我在select一个新的sheet 然后在copy的时候, 新的这个sheet 就又到新的文档2里面去 是这个意思咩?


对  通过 workbook.Sheets(1).Copy(After:=workbook.Sheets(1))  来确定copy的位置

#6


    

For Each Item In shts
        Sheets(Array("CD_totalA", "CD_totalB", Item)).Select
    Sheets(Item).Activate
    Sheets(Array("CD_totalA", "CD_totalB", Item)).Copy
    ActiveWorkbook.SaveAs Filename:=filepath + Item + "Margin.xls" _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ActiveWindow.Close
    Next




Quote: 引用 5 楼 stubble 的回复:

 还是没弄出来,做了一个VBA的。。。但是还是期望VB.NET 版本的

#7


Visual Basic.NET中就是这样的
workbook.Sheets(1).Copy(After:=workbook.Sheets(1))

#1


复制sheet1 的代码  (将sheet1复制了一次,然后移动到sheet1后面)

 Dim applicationClass As New ApplicationClass
        Dim workbook As Microsoft.Office.Interop.Excel.Workbook = Nothing
            workbook = applicationClass.Workbooks.Open("路径+文件名  ")
 workbook.Sheets(1).Select()
workbook.Sheets(1).Copy(After:=workbook.Sheets(1))
worksheet.SaveAs("路径+文件名  ")


然后是将sheet1 单独保存(将sheet1选中,然后复制到新excel)
 
workbook.Sheets(1).Select()
 worksheet.Copy()
  applicationClass.ActiveWorkbook.SaveAs("路径+文件名")

#2


引用 1 楼 stubble 的回复:
复制sheet1 的代码  (将sheet1复制了一次,然后移动到sheet1后面)

 Dim applicationClass As New ApplicationClass
        Dim workbook As Microsoft.Office.Interop.Excel.Workbook = Nothing
            workbook = applicationClass.Workbooks.Open("路径+文件名  ")
 workbook.Sheets(1).Select()
workbook.Sheets(1).Copy(After:=workbook.Sheets(1))
worksheet.SaveAs("路径+文件名  ")


然后是将sheet1 单独保存(将sheet1选中,然后复制到新excel)
 
workbook.Sheets(1).Select()
 worksheet.Copy()
  applicationClass.ActiveWorkbook.SaveAs("路径+文件名")


我就是有点没明白过来。 
worksheet.Copy() 如何复制2个表呢 
比如我第一个EXCEL文件要

sht1 ,sht2,sht3

第二个EXCEL文件要
sht1,sht2,sht4

这样

#3


worksheet.Copy()  只能复制一个sheet  
workbook.Sheets(“ 你想要复制的sheet的索引或者名字”).Select() 就是决定复制哪个sheet

你想复制多sheet   放在循环执行
比如复制 sht2    
就  workbook.Sheets(2).Select() 
  worksheet.Copy() 

感觉你的需求不是很难 ,上述代码可以实现。
只要你明白了原理  其实 你就知道该怎么做了 。

#4


引用 3 楼 stubble 的回复:
worksheet.Copy()  只能复制一个sheet  
workbook.Sheets(“ 你想要复制的sheet的索引或者名字”).Select() 就是决定复制哪个sheet

你想复制多sheet   放在循环执行
比如复制 sht2    
就  workbook.Sheets(2).Select() 
  worksheet.Copy() 

感觉你的需求不是很难 ,上述代码可以实现。
只要你明白了原理  其实 你就知道该怎么做了 。



哦哦  worksheet.Copy()  你的意思 每次这个以执行, 被选定复制的sheet就已经到了新的文档2里面去了。
我在select一个新的sheet 然后在copy的时候, 新的这个sheet 就又到新的文档2里面去 是这个意思咩?

#5


引用 4 楼 jadilee 的回复:
Quote: 引用 3 楼 stubble 的回复:

worksheet.Copy()  只能复制一个sheet  
workbook.Sheets(“ 你想要复制的sheet的索引或者名字”).Select() 就是决定复制哪个sheet

你想复制多sheet   放在循环执行
比如复制 sht2    
就  workbook.Sheets(2).Select() 
  worksheet.Copy() 

感觉你的需求不是很难 ,上述代码可以实现。
只要你明白了原理  其实 你就知道该怎么做了 。



哦哦  worksheet.Copy()  你的意思 每次这个以执行, 被选定复制的sheet就已经到了新的文档2里面去了。
我在select一个新的sheet 然后在copy的时候, 新的这个sheet 就又到新的文档2里面去 是这个意思咩?


对  通过 workbook.Sheets(1).Copy(After:=workbook.Sheets(1))  来确定copy的位置

#6


    

For Each Item In shts
        Sheets(Array("CD_totalA", "CD_totalB", Item)).Select
    Sheets(Item).Activate
    Sheets(Array("CD_totalA", "CD_totalB", Item)).Copy
    ActiveWorkbook.SaveAs Filename:=filepath + Item + "Margin.xls" _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ActiveWindow.Close
    Next




Quote: 引用 5 楼 stubble 的回复:

 还是没弄出来,做了一个VBA的。。。但是还是期望VB.NET 版本的

#7


Visual Basic.NET中就是这样的
workbook.Sheets(1).Copy(After:=workbook.Sheets(1))