我有几个结构不同的SSRS报告(.xls文件):
我希望所有这9个excel工作表都合并到具有不同工作表的单个Excel文件中,也就是说,我的最终excel文件应该具有所有这9个工作表,我可以使用下面的宏代码来实现。
Path = "C:\Users\FILES\" ' This will fetch all the files form the mentioned location
Filename = Dir(Path & "*.xls")
Do While Filename <> ""
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
Workbooks(Filename).Close
Filename = Dir()
Loop
Application.DisplayAlerts = False ' Delete an extra sheet
Worksheets("SHEET1").Delete
Application.DisplayAlerts = True
Application.DisplayAlerts = False ' This will create a new excel file and stores all the data in to it.
ThisWorkbook.CheckCompatibility = False
ThisWorkbook.SaveAs Filename:="C:\Users\merge.xls", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True
Application.DisplayAlerts = False ' Save and exit
ThisWorkbook.Save
Application.DisplayAlerts = True
Application.Quit
我面临的唯一问题是合并VBA代码的文件时,不包括SSRS报告中一些单元格所应用的颜色。
如何在不丢失已经应用的颜色格式的情况下复制excel文件?
答案 0 :(得分:0)
使用.Copy
和.PasteSpecial
,通常应避免使用它们,但在这种情况下,它们似乎是唯一的解决方案...
原因:
发生此问题的原因是SQL Server Reporting Services 2008和SQL Server Reporting Services 2008 R2都使用自定义调色板而不是Excel附带的内置调色板。报告中使用的前56种独特颜色是在自定义调色板中定义的。解决方法:
您可以使用以下方法之一解决此问题,具体取决于您在环境中使用的Excel版本:Excel 2007或Excel 2010:使用以下方法之一:
方法1:按以下步骤使用Ctrl + C和Ctrl + V组合:
通过在源工作簿中按Ctrl + C复制源数据。 在新工作簿中,使用以下方法之一保留源格式: 右键单击并从“编辑”菜单中选择“选择性粘贴”选项,然后通过选择“使用所有源主题”选项来粘贴数据。 要么 在新工作表中按Ctrl + V后,在“粘贴选项”中选择“保留源格式”。
使用此方法时需要注意的一个警告是,行高和列宽可能不会延续到新工作簿中。要保持行高和列宽,可以先将“移动”或“复制工作表”移到新工作簿中,以确保可以接受列宽和行高,然后再次使用源格式复制内容。
方法2:通过以下附加步骤使用“移动”或“复印表”操作:
在执行“移动或复制图纸”以将图纸复制到另一个工作簿之后,请执行以下操作: 转到“文件”菜单,然后在左窗格中选择“选项”。 在“ Excel选项”页面中,选择“保存”选项。 在保留工作簿的外观下,单击颜色...按钮。 在“颜色”页的“从以下位置复制颜色”列表框中,选择从SQL Server Reporting Services导出的源Excel文件。 单击确定两次,以关闭所有选项窗口。
您还可以使用类似于以下内容的宏代码来自动化此解决方法:
Sub Sample() Sheets("OriginalExcelSheetExportedFromReport").Select Sheets("OriginalExcelSheetExportedFromReport ").Copy ActiveWorkbook.Colors = Workbooks("OriginalExcelSheetExportedFromReport.xls").Colors End Sub
Excel 2003:通过以下附加步骤使用“移动”或“复制工作表”操作:
在执行“移动或复制工作表”以将工作表复制到另一个工作簿之后,请执行以下操作: 转到工具菜单,然后单击选项。 选择“颜色”选项卡,然后在“从以下位置复制颜色”列表框中,选择从SQL Server Reporting Services导出的源Excel文件。单击“确定”关闭对话框。
来源:Microsoft Support 2465477
类似问题:https://stackoverflow.com/a/6447743/10223558
我们正在尝试,您可以尝试下面的代码来避免ActiveWorkbook
Do While Filename <> ""
With Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True)
For Each Sheet In .Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
.Close
End With
Filename = Dir()
Loop
答案 1 :(得分:0)
我发现了问题所在,对代码进行了更改,添加了一行,将颜色从源文件复制到了新文件中。
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
***ActiveWorkbook.Colors = Workbooks(Filename).Colors***