से बाहर नहीं निकलता है अरे मैं एक सी # WinForms एप्लिकेशन से PowerPoint और Excel को स्वचालित कर रहा हूं; मैं जो करता हूं वह PowerPoint से स्लाइड्स पढ़ता है और उन्हें Excel में सहेजता है और फिर दोनों ऐप्स को छोड़ देता है। एक्सेल सफलतापूर्वक छोड़ देता है लेकिन पावरपॉइंट्स छोड़ नहीं जाता है। समस्या यह है कि जब मैं पहली बार परिवर्तित करता हूं तो यह छोड़ता नहीं है, लेकिन जब मैं फिर से परिवर्तित करता हूं तो यह करता है।सी # के माध्यम से लॉन्च किया गया पावरपॉइंट
यहाँ मेरी कोड
try
{
PowerPoint.Application ppApp;
PowerPoint.Presentation ppPres;
List<Company> companies = new List<Company>();
ppApp = new PowerPoint.Application();
ppApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
ppApp.WindowState = Microsoft.Office.Interop.PowerPoint.PpWindowState.ppWindowMinimized;
ppPres = ppApp.Presentations.Open(fileTxtBox.Text,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoTrue);
int slides = ppPres.Slides.Count;
for (int slide = 1; slide <= slides; slide++)
{
int rows = 1;
PowerPoint.Cell cell;
int shape = 1;
for (; shape < ppPres.Slides[slide].Shapes.Count; shape++)
{
if (ppPres.Slides[slide].Shapes[shape].HasTable == Microsoft.Office.Core.MsoTriState.msoTrue)
{
cell = ppPres.Slides[slide].Shapes[shape].Table.Cell(1, 1);
if (cell.Shape.TextFrame.TextRange.Text.Trim().ToLower().Contains("realized"))
{
rows = ppPres.Slides[slide].Shapes[shape].Table.Rows.Count;
break;
}
}
}
Company comp = new Company(rows);
InitializeCompany(ref comp, ppPres.Slides[slide]);
companies.Add(comp);
}
SaveInExcel(companies);
ppPres.Close();
ppPres = null;
ppApp.Quit();
ppApp = null;
return;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
अरे माइक धन्यवाद, लेकिन यह didn नहीं है काम नहीं किया। एक बात जो मैं आपको बताना चाहता हूं वह यह है कि जब मैं अपना स्वयं का WinForm ऐप बंद करता हूं, तो PowerPoint भी बंद हो जाता है। – akif
हाँ जब आप अपना WinForm बंद करते हैं तो इसे बंद करना सामान्य है क्योंकि आप जिस भी ऑब्जेक्ट को रिलीज़ करने में विफल रहे हैं, अंत में रिलीज डी जब रनटाइम टूट गया है। आप जीसी.कोलेक्ट() और जीसी.WaitForPending() फ़ाइनलाइजर्स TWICE को कॉल करने का प्रयास कर सकते हैं। इससे कोई फर्क नहीं पड़ता कि आप वीएसटीओ का उपयोग नहीं कर रहे हैं, लेकिन यह चोट नहीं पहुंचा सकता है। आपको इस बारे में सोचना होगा कि यहां अन्य चर क्या हैं ... (अगली टिप्पणी देखें।) –
आपको इस बारे में सोचना होगा कि यहां अन्य चर क्या हैं, और उन्हें छोड़ दें। उदा। (1) क्या कहीं भी कोई अन्य स्थैतिक चर है? (2) आपका प्रारंभिक कॉम्पैनी क्या है (रेफ कॉम्प, पीपीपीआरएस स्लाइड [स्लाइड]) कॉल करते हैं? यदि यह आपकी कंपनी ऑब्जेक्ट के भीतर पावरपॉइंट स्लाइड का संदर्भ संग्रहीत करता है, तो यह कॉल कंपनियों के साथ। Add (comp) PowerPoint संदर्भ के लिए स्थायी संदर्भ बनाएगा। इन्हें मार्शल को कॉल करके इस्तेमाल किया जाना चाहिए। FinalReleaseComObject() या अन्यथा PowerPoint लटका होगा। मुझे नहीं पता कि यह क्या हो रहा है, लेकिन आपको * सभी * अपने पावरपॉइंट संदर्भों को रिलीज़ करने की आवश्यकता है। –