У меня есть приложение, которое может экспортировать слайды в PowerPoint.Я использую Microsoft.Office.Interop.PowerPoint.dll.Это 11 версия сборки.Я запустил приложение сегодня, и кажется, что приложение выдает исключение (исключение из HRESULT: 0x80070057 (E_INVALIDARG)).Это исключение выдается только тогда, когда в системе открыто приложение powerpoint, прежде чем я нажимаю кнопку экспорта.Я добавляю пользовательское свойство в CustomDocumentProperties презентации Powerpoint, чтобы определить, какая презентация была создана приложением.Это первый раз, когда я увидел это исключение.У меня Windows 7 Ultimate x64 sytem с Visual Studio 2008 и 2010 и, конечно, Office 2007.
Часть кода, которая вызывает исключение:
oDocAuthorProp = typeDocBuiltInProps.InvokeMember("Item",
BindingFlags.Default |
BindingFlags.GetProperty,
null, oDocBuiltInProps,
new object[] { strIndex });
Что не так?Я следовал этой статье Microsoft: http://support.microsoft.com/kb/303296
Уже более года Приложение работает без каких-либо проблем.Что идет не так?После 10 часов, потраченных на поиск в Интернете ответа, от которого я отказываюсь.
вот код метода Export2Powerpoint:
public static void Export(List<ChartObject> chartObjects)
{
Application ppApp = new Application();
foreach (ChartObject chartObject in chartObjects)
{
chartObject.Chart.BorderLineStyle = ChartDashStyle.NotSet;
}
Presentation ppPress = null;
int i;
object oDocBuiltInProps;
string strValue = string.Empty;
if(ppApp.Presentations.Count == 0)
{
ppPress = AddPresentation(ppApp, ppPress);
}
else
{
i = 0;
object oDocAuthorProp = null;
foreach (Presentation presentation in ppApp.Presentations)
{
oDocBuiltInProps = presentation.CustomDocumentProperties;
Type typeDocBuiltInProps = oDocBuiltInProps.GetType();
string strIndex = "Browser";
try{
oDocAuthorProp = typeDocBuiltInProps.InvokeMember("Item",
BindingFlags.Default |
BindingFlags.GetProperty,
null, oDocBuiltInProps,
new object[] { strIndex }); ======>> here is the line that generates the exception
}
catch(Exception e)
{
//ErrorHandling.LogErrorToFile(e.Message, e.StackTrace);
}
if (oDocAuthorProp != null)
{
Type typeDocAuthorProp = oDocAuthorProp.GetType();
strValue = typeDocAuthorProp.InvokeMember("Value",
BindingFlags.Default |
BindingFlags.GetProperty,
null, oDocAuthorProp,
new object[] {}).ToString();
}
i++;
if(strValue == "true")
{
break;
}
}
if (strValue != string.Empty)
{
ppPress = ppApp.Presentations[i];
}
else
{
ppPress = AddPresentation(ppApp, ppPress);
}
}
i = ppPress.Slides.Count + 1;
int j = 0;
chartObjects.Reverse();
chartObjects.ForEach(chartObject =>
{
string directory = Path.Combine(System.Windows.Forms.Application.StartupPath, (i) + ".png");
PowerPoint.Slide actSlide = ppPress.Slides.Add(i, PpSlideLayout.ppLayoutBlank);
actSlide = ppPress.Slides[i];
Size size = chartObject.Chart.Size;
chartObject.Chart.ChartAreas[0].AxisX.LabelsAutoFitMinFontSize = 14;
chartObject.Chart.Size = new Size(RunTime.Configuration.ImageXSize,RunTime.Configuration.ImageYSize);
chartObject.Chart.SaveAsImage(directory, ChartImageFormat.Png);
chartObject.Chart.Size = size;
Image image = Image.FromFile(directory);
actSlide.Shapes.AddPicture(directory, MsoTriState.msoFalse,
MsoTriState.msoTrue, 0, 0, (int)ppPress.SlideMaster.Width, (int)ppPress.SlideMaster.Height);
image.Dispose();
File.Delete(directory);
j++;
});
chartObjects.Reverse();
ppApp.Visible = MsoTriState.msoTrue;
foreach (ChartObject chartObject in chartObjects)
{
chartObject.Chart.BorderLineStyle = ChartDashStyle.Solid;
}
}
РЕДАКТИРОВАТЬ.только когда открыто хотя бы одно окно PowerPoint и презентация в этом окне еще не сохранена на диск.Когда открыто хотя бы одно окно PowerPoint с презентацией, уже сохраненной на диск, приложение работает нормально.