【问题标题】:Solution for Dividing WorkSheet into Multiple Files with vba/excel/c#vba/excel/c#将WorkSheet分成多个文件的解决方案#
【发布时间】:2012-04-13 15:01:12
【问题描述】:

我想将一个工作表分成多个文件。

我有一个大约 10,000 行的工作表。有花哨的格式、条件格式、漂亮的颜色,我想保留所有这些属性。

我需要把这个工作表分开。

输入将是:

+-------+----+----+----+----+
| Alex  | 45 |  6 | 23 | 56 |
| Alex  | 61 | 47 | 56 | 56 |
| Liza  | 49 | 70 | 34 | 37 |
| Alex  | 33 | 30 | 22 | 39 |
| Tommy |    | 66 | 62 | 29 |
| Liza  |    | 38 | 49 | 80 |
| Alex  | 23 | 56 | 56 | 39 |
| Liza  | 32 | 46 | 40 | 43 |
| Liza  |    | 90 | 24 | 38 |
| Tommy | 38 | 10 | 52 | 23 |
| Nancy | 35 | 36 | 23 | 25 |
+-------+----+----+----+----+

并且输出将是这样的单独文件(请记住,我想保留所有花哨的格式,因此该解决方案可以直接使用 excel,而不仅仅是 CSV(因为 csv 不能保留格式))

最终产品:

+------+----+----+----+----+
|      |    |    |    |    |
| Alex | 45 |  6 | 23 | 56 |
| Alex | 61 | 47 | 56 | 56 |
| Alex | 33 | 30 | 22 | 39 |
| Alex | 23 | 56 | 56 | 39 |
+------+----+----+----+----+

+------+----+----+----+----+
|      |    |    |    |    |
| Liza | 49 | 70 | 34 | 37 |
| Liza |    | 38 | 49 | 80 |
| Liza | 32 | 46 | 40 | 43 |
| Liza |    | 90 | 24 | 38 |
+------+----+----+----+----+

+-------+----+----+----+----+
|       |    |    |    |    |
| Nancy | 35 | 36 | 23 | 25 |
+-------+----+----+----+----+

+-------+----+----+----+----+
|       |    |    |    |    |
| Tommy |    | 66 | 62 | 29 |
| Tommy | 38 | 10 | 52 | 23 |
+-------+----+----+----+----+

解决方案可以是 VBA/.NET 的组合。请注意,我需要多个文件作为输出。

让这个工作的最快方法是什么?非常感谢您的任何意见!

请注意这是 excel 2007 及更高版本

【问题讨论】:

  • 这是 Excel 2003 及更早版本的 .xls 文件,还是 Excel 2007 及更高版本的 .xlsx 文件?
  • @CharlieKilian 现在是 2007 年及以后
  • @CharlieKilian 但我想我可以保存为 2003
  • 你知道足够多的 VBA 来做到这一点吗? (您是在寻找指导还是解决方案?)
  • @mick 我知道这可以通过 VBA 实现,但我想知道是否有一个简单的 c# 解决方案,如果只使用 VBA,你能告诉我我将如何拆分基于列中的 UNIQUE 值?

标签: c# .net excel vba


【解决方案1】:

我以前做过。

您可以使用此代码:

Option Explicit

Sub getInformations()

Dim varName As String

Application.ScreenUpdating = False
'Replace Tabelle1 with the name of your sheet where the Informations are
Worksheets("Tabelle1").Select
Worksheets("Tabelle1").Copy After:=Sheets("Tabelle1")
Sheets("Tabelle1 (2)").Select
Sheets("Tabelle1 (2)").Name = "Temp"
Do Until Range("A1").Value = vbNullString
    varName = Range("A1").Value
    Workbooks.Add
    'Change the Path where you want to save the File
    ActiveWorkbook.SaveAs ("C:\Documents and Settings\vgellhom\Desktop\" & varName & ".xls")
    'Change The Name of the Excel Workbopk to the Name of the Workbook with the Names
    Workbooks("Data.xls").Activate
    Sheets("Temp").Select
    varName = Range("A1").Value

    Do While True
        Cells.Find(What:=varName).Activate
        Range(ActiveCell.Row & ":" & ActiveCell.Row).Select
        Selection.Copy
        Workbooks(varName & ".xls").Activate
        ActiveSheet.Paste
        ActiveCell.Offset(1, 0).Activate
        'Change The Name of the Excel Workbopk to the Name of the Workbook with the Names
        Workbooks("Data.xls").Activate
        Sheets("Temp").Select
        Selection.Delete Shift:=xlUp
        If Not Cells.FindNext(After:=ActiveCell) Is Nothing Then
            Cells.Find(What:=varName).Activate
        Else
            Exit Do
        End If
    Loop
    Workbooks(varName & ".xls").Activate
    'Change the Path where you want to save the File
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True

    Workbooks(varName & ".xls").Close
Loop
Application.DisplayAlerts = False
Sheets("Temp").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

希望对你有帮助...

【讨论】:

  • 这与我要概述的方法非常相似。 +1 到 Moosli。
  • @mossli 再次感谢您。当你有机会时,你能帮我理解这段代码吗
  • 这是什么意思:'将 Excel Workbopk 的名称更改为带有名称的工作簿的名称
  • 您有一个 Excel 文件,其中包含所有名称。您必须用该名称交换“Data.xls”!
  • @l--''''''------'''''''''''' 当然可以。
【解决方案2】:

由于 Excel 格式化通常是 a** 的一大难题,我建议尝试以下解决方案:

  1. 计算并存储所有唯一键。
  2. 为每个键创建一个文件副本(如file_Alex.xls[x]file_Liza.xls[x] 等)。
  3. 处理每个文件,删除所有非关键行,从而留下所有关键条目。此外,因为您只删除整行,所以文件中的所有格式都被保留。

这是非常未经优化的,但也是极其简单的解决方案。如果是一次性工作,应该就可以了。

【讨论】:

  • 这看起来很棒。能否请您详细说明#3,这里的逻辑是什么?
  • @I__ 好吧,您删除了对给定文件来说是非键的整行,只留下键匹配行。因此所有的格式都被保留了。
  • 我重读了这篇,这看起来非常棒,我想我现在就试试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
相关资源
最近更新 更多