Свойства Worksheet.PageSetup очень медленны при их установке, но очень быстры, чтобы просто получить значение.
Таким образом, лучший способ - сначала проверить каждое значение, чтобы убедиться, что вам нужно установить его, а затем только те свойства, которые вам нужны. Кроме того, он может помочь установить «Application.ScreenUpdating = False» и «Application.Calculation = xlCalculationManual».
Используя ваш код в качестве отправной точки, обновленный код может выглядеть примерно так:
Excel.Application excelApp = xlWS.Application;
bool origScreenUpdating = excelApp.ScreenUpdating;
Excel.XlCalculation origCalcMode = excelApp.Calculation;
try
{
myExcelApp.ScreenUpdating = False;
myExcelApp.Calculation = xlCalculationManual;
xlWS.Name = "INVOICE";
if (xlWS.PageSetup.PaperSize != XlPaperSize.xlPaperA4)
{
xlWS.PageSetup.PaperSize = XlPaperSize.xlPaperA4;
}
if (xlWS.PageSetup.TopMargin != xl.CentimetersToPoints(1.5))
{
xlWS.PageSetup.TopMargin = xl.CentimetersToPoints(1.5);
}
if (xlWS.PageSetup.LeftMargin != xl.CentimetersToPoints(1))
{
xlWS.PageSetup.LeftMargin = xl.CentimetersToPoints(1);
}
if (xlWS.PageSetup.BottomMargin != xl.CentimetersToPoints(1.5))
{
xlWS.PageSetup.BottomMargin = xl.CentimetersToPoints(1.5);
}
if (xlWS.PageSetup.RightMargin != xl.CentimetersToPoints(1))
{
xlWS.PageSetup.RightMargin = xl.CentimetersToPoints(1);
}
if (xlWS.PageSetup.Zoom != 60)
{
xlWS.PageSetup.Zoom = 60;
}
}
finally
{
myExcelApp.ScreenUpdating = origScreenUpdating;
myExcelApp.Calculation = origCalcMode;
}
Это лучшее, что вы можете сделать на стороне Excel - и обычно это очень помогает. Однако я не совсем уверен, насколько это поможет в вашей ситуации, поскольку кажется, что вы вносите множество изменений настроек, которые отличаются от настроек по умолчанию. Поэтому первая проверка того, что значение должно быть задано, может не помочь вам, если все эти изменения действительно должны произойти.
Но я скрестил пальцы за тебя ...
- Майк
(Кстати, для перекрестных ссылок, вот ответ VBA, который я дал на ту же тему, где OP видел хорошее улучшение производительности: Как быстрее печатать в Excel VBA? )