Цветовое форматирование теряется после объединения нескольких рабочих книг в одну. - PullRequest
0 голосов
/ 26 июня 2019

У меня есть пара отчетов SSRS (файлы .xls) с различными структурами:

  • В отчете 1 есть 3 листа Excel.
  • Отчет 2 содержит 2 листа Excel.
  • Отчет 3 содержит 4 листа Excel.

Я хочу, чтобы все эти 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 без потери уже примененного цветового формата?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Я обнаружил проблему, внес изменения в код, добавил одну строку, которая копирует цвет из исходного файла в новый файл без каких-либо изменений.

Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)  

***ActiveWorkbook.Colors = Workbooks(Filename).Colors***  
0 голосов
/ 26 июня 2019

Используйте .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 выберите вариант Сохранить. Нажмите кнопку Цвета… под Сохранить внешний вид рабочей книги. На странице «Цвет» в поле «Копировать цвета из списка» выберите исходный файл Excel, который экспортируется из служб отчетов SQL Server. Дважды нажмите кнопку ОК, чтобы закрыть все окна параметров.

Вы также можете автоматизировать этот обходной путь, используя макрос-код, подобный следующему:

Sub Sample() 
    Sheets("OriginalExcelSheetExportedFromReport").Select 
    Sheets("OriginalExcelSheetExportedFromReport ").Copy 
    ActiveWorkbook.Colors = Workbooks("OriginalExcelSheetExportedFromReport.xls").Colors 
End Sub

Excel 2003: используйте операции перемещения или копирования листа со следующими дополнительными шагами:

После перемещения или копирования листа для копирования листа в другую рабочую книгу выполните следующие действия: Перейдите в меню «Инструменты» и нажмите «Параметры». Перейдите на вкладку «Цвет» и в списке «Копировать цвета из списка» выберите исходный файл Excel, который экспортируется из служб отчетов SQL Server. Нажмите кнопку ОК, чтобы закрыть диалоговое окно.

Источник: Служба поддержки Microsoft 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...