太多的不同单元格格式

  1. 我有一个大规模的文件,从头开始重新创build10张,更新了12张,原始数据加载了5张,以及报表使用了7张macros。
  2. 我最近添加了一个新表,并运行到Excel “太多不同的单元格格式”问题。

我所尝试过的

我已经阅读了一些谷歌search结果,他们说我应该简化格式,但我甚至不知道我是如何得到4000个不同的单元格格式,更不用说多less我使用哪些,所以我可以删除一些。

它也会popup一些文件运行的时间,但不是全部,直到它出现,然后每次运行时都会发生。 由于macros正在做很多工作,包括从头开始创build10张表,我不知道该怎么做。

有人知道吗

  • 我可以运行一个macros来获取所有单元格格式的列表以及有多less个单元格正在使用它们?
  • 他们相信一个程序,以帮助删除多余的单元格格式?

谢谢

“单元格格式”很复杂。 单元格没有真正的“格式”。 他们有一个字体(其本身有一个名称和一个大小),一个NumberFormat,高度,宽度,方向等

所以你需要定义你的意思是“格式”。

以下是获取字体名称和大小的代码。 你可以replace你喜欢的任何属性。

下面的代码假定您已经在工作簿中创build了一个名为“格式”的工作表。 运行macros之后,字体名称和大小将在该工作表中列出。

Public Sub GetFormats() Dim CurrentSheet As Integer Dim UsedRange As Range Dim CurrentCell As Range Dim rw As Long Sheets("Formats").Cells.ClearContents rw = 1 For CurrentSheet = 1 To Sheets.Count Set UsedRange = Range(Sheets(CurrentSheet).Range("A1"), Sheets(CurrentSheet).Range("A1").SpecialCells(xlLastCell)) For Each CurrentCell In UsedRange FontUsed = CurrentCell.Font.Name + ":" + CStr(CurrentCell.Font.Size) If Sheets("Formats").Cells.Find(FontUsed) Is Nothing Then Sheets("Formats").Cells(rw, 1).Value = FontUsed rw = rw + 1 End If Next Next CurrentSheet End Sub 

您所描述的问题导致我(和同事)在使用Excel 2010时失去了许多小时的工作效率。下面的VBA代码/macros帮助我将.xlsm文件从使用3540样式下降到了34。

 ' Description: ' Borrowed largely from http://www.jkp-ads.com/Articles/styles06.asp Option Explicit ' Description: ' This is the "driver" for the entire module. Public Sub DropUnusedStyles() Dim styleObj As Style Dim rngCell As Range Dim wb As Workbook Dim wsh As Worksheet Dim str As String Dim iStyleCount As Long Dim dict As New Scripting.Dictionary ' <- from Tools / References... / "Microsoft Scripting Runtime" ' wb := workbook of interest. Choose one of the following ' Set wb = ThisWorkbook ' choose this module's workbook Set wb = ActiveWorkbook ' the active workbook in excel Debug.Print "BEGINNING # of styles in workbook: " & wb.Styles.Count MsgBox "BEGINNING # of styles in workbook: " & wb.Styles.Count ' dict := list of styles For Each styleObj In wb.Styles str = styleObj.NameLocal iStyleCount = iStyleCount + 1 Call dict.Add(str, 0) ' First time: adds keys Next styleObj Debug.Print " dictionary now has " & dict.Count & " entries." ' Status, dictionary has styles (key) which are known to workbook ' Traverse each visible worksheet and increment count each style occurrence For Each wsh In wb.Worksheets If wsh.Visible Then For Each rngCell In wsh.UsedRange.Cells str = rngCell.Style dict.Item(str) = dict.Item(str) + 1 ' This time: counts occurrences Next rngCell End If Next wsh ' Status, dictionary styles (key) has cell occurrence count (item) ' Try to delete unused styles Dim aKey As Variant On Error Resume Next ' wb.Styles(aKey).Delete may throw error For Each aKey In dict.Keys ' display count & stylename ' eg "24 Normal" Debug.Print dict.Item(aKey) & vbTab & aKey If dict.Item(aKey) = 0 Then ' Occurrence count (Item) indicates this style is not used Call wb.Styles(aKey).Delete If Err.Number <> 0 Then Debug.Print vbTab & "^-- failed to delete" Err.Clear End If Call dict.Remove(aKey) End If Next aKey Debug.Print "ENDING # of style in workbook: " & wb.Styles.Count MsgBox "ENDING # of style in workbook: " & wb.Styles.Count End Sub 

很多人似乎遇到了这个问题。

大多数情况下, 这个问题涉及到过多的未使用和经常损坏的样式,而不是单元格唯一单元格格式组合的总数。

我写了一个实用程序来修复可以保存到XL2003的XL2007 OOXML文件。 这里是博客文章的链接 :

  • 需要.Net3.5和MS Excel 2007。
  • 将修复xlsx或xlsm文件。
  • 该post有一个自述文件去与应用程序。

不需要像在其他一些论坛上所build议的那样通过使用Open Office来运行进一步破坏文件的风险

在Excel 2007+中导致“太多单元格格式”错误消息的错误已得到解决: http ://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for-excel-2007 -custom-styles-duplication /请注意,这些错误修复将不会删除预先存在的与样式相关的文件损坏。 开放的基于XML的工具(免费提供)是唯一的选项,可以删除Excel对象模型工具无法访问的元素:例如,伪装成内置的,隐藏的样式等不良风格…基于开放XML的清理手段100%风格相关腐败免费文件。

我有这个问题,发现清除它最简单的方法是使用这个Excel添加 。 这个问题似乎是微软页面上的 “官方”答案。

对于那些和我在使用.xlam文件时一样困惑的人来说,在下载之后,你可以在Excel中执行此操作:

  1. 单击文件<选项<加载项。
  2. 在pipe理选项下点击开始。
  3. 在加载项窗口中单击浏览,浏览到保存XLAM文件的位置,突出显示它,然后单击确定。
  4. 在“加载项”窗口中启用新加载项,然后单击“确定”。
  5. 在主屏幕的色带栏上,现在应该有一个“删除样式”部分,其中包含一个显示工作簿中样式数量的button(如果遇到此问题,可能会有数千个样式)。
  6. 点击function区上的button,将消除所有重复的格式。

如果您没有看到它,请检查它是否正确显示在function区上。 右键单击function区并说“自定义function区”。 然后点击加载项。 在“活动应用程序加载项”下,您应该看到“删除多余的样式”。

SpreadsheetGear for .NET将采用非唯一的格式,可能有助于您的情况。

你可以在这里下载免费试用,如果你想看看是否有帮助。 只需将工作簿加载到与评估软件一起安装的“SpreadsheetGear 2009 for Windows”应用程序中,然后保存该工作簿即可。

如果你真的有这么多独特的格式,你将不得不简化。 字体/单元格颜色(内部),数字格式,水平和垂直alignment,边框,缩进水平以及可能的一些我没有想到的东西的每一个独特的组合都会在表格中引起一个唯一的入口。

另一种select是切换到Excel 2007,其中唯一的单元格格式从4000增加到64K。

免责声明:我自己的SpreadsheetGear LLC

我以前见过这个问题。 可以重新创build,以certificate我无话可说。 这是一个小问题22,但是当你有一个“太多格式”的问题表,打开一个全新的工作表,并从太多的格式表中复制一个单元格,并将其粘贴到新的工作簿。 现在这个工作簿会被“感染”,并且也会有太多的格式错误。 看起来很多格式的数据都是通过粘贴来实现的,除非你使用特殊的粘贴来限制它。

如何让事情变得更好? 那么一个解决方法是使用另存为HTMLfunction。 忍受我虽然这个工作。 我在这里谈论2003年,我不知道2007年会发生什么,也许这个bug已经修复。 所以…另存为Html然后closuresexcel。 加载一个新的会话并加载,确保不要运行任何macros,然后加载保存为电子表格。

当您closures并重新打开这个新的电子表格时,太多格式的问题应该消失。

一种解决scheme可能是使用ASAP实用程序 。 在表单部分有一个remove all unused styles选项。 我想,您必须closures工作簿并重新打开。

这将删除除默认样式外的所有样式(正常,解释性,20%Accent1等)。 包括用户创build的样式,但清理工作簿是一种快速和肮脏的方法:


 Sub NewNukeStyles() Dim tempstyle As Style For Each tempstyle In ActiveWorkbook.Styles If tempstyle.BuiltIn = False Then If tempstyle.Locked = True Then 'not sure what this is tempstyle.Delete End If End If Next tempstyle End Sub 'NukeStyles 

我很想知道tempstyle.locked属性实际引用了什么,而不是“一个布尔值,指示对象是否被locking”。

如果可以打开文件,请尝试>编辑>清除>格式。

突出显示表单之前,它为我工作的格式。

请确保在做这件事之前制作一份EXCEL的副本,只需要补充缺less的东西,就可以交叉反驳旧文档。

这是Excel中的一个错误,它会困扰所有发布的版本。

这个问题可以通过这个工具来解决。

适用于XLSXLSX文件。

我知道上面有一些有趣的方法来解决这个错误。

但我会做一些基本的技巧总结,以解决太多的单元格格式错误,但我认为这是非常有效的,特别是对于新的比赛。

  1. 复制工作表到新文件 – 这是有效的,但需要时间
  2. 删除范围,你不知道他们是什么
  3. 重新格式化工作表,以便设置最小格式
  4. 清除所有格式

我希望你喜欢这些基本的技巧

我关于错误的详细信息如何修复太多不同的单元格格式

我几乎在这里使用所有的答案,但错误信息留下来。

阅读这个微软支持页面( https://support.microsoft.com/en-us/kb/213904 )后,我来到XLStylesTool.exe。

但是,再次没有运气(因为我错误地使用了它)。

我有Windows 7,所以Windows 8/10版本是不行的。

我阅读下载页面的评论(因为它没有写在下载信息中) https://sergeig888.wordpress.com/2011/03/21/net4-0-version-of-the-xlstylestool-is-now -可选/

我发现,我需要.NET4.0版本使其在win7下工作(这些假人不能简单地称之为win7版本???)

下载链接: https : //skydrive.live.com/redir?resid=53E1D37F76F69444!900&authkey=!AH5oeGVaWlMsFHA&ithint=file%2c.zip

我的下一个问题是它不能在* .XLS上工作,所以我打开excel并保存为* .XLSM,这是很有效的。

之后,只需点击“获取Excel文件”和“处理文件”(我选中了“提交更改并在Excel中打开”,并在Excel中保存为“* .xls”)closuresexcel,重新打开文件,WORKS警告) !!!

如果它给你一个错误“太多的单元格格式”,那么立刻保存文档。 将文档的名称暂时更改为其他名称。 打开文档,然后用相同的名字保存它,就像以前一样。 现在closures文档并打开它,它不会再显示该错误。 有时它只是一个简单的保存,但它对我来说有点奇怪!

一个简单的解决scheme,如果它是一个小文件:

只需复制并粘贴到Word。 它将以表格forms检测内容。 然后select所有列( 不是通过左上angular的十字标记完整的表格),并将其过滤到一个新的.xls表格中,只有清除值。