Gelöst: 0x800A03EC bei Excel Pastespecial
Fehlerbeschreibung
Beim Ausführen einer Excel Copy und PasteSpecial Anwendung in einem Excel Addin (VSTO.Interop) entsteht ein Fehlermeldung 0x800A03EC
Fehlermeldung
System.Runtime.InteropServices.COMException HResult=0x800A03EC Message=Ausnahme von HRESULT: 0x800A03EC Source=<Cannot evaluate the exception source> StackTrace: <Cannot evaluate the exception stack trace>
|
Fehler-Zeile
Fehler bei der Programm-Zeile:
new_Worksheet.PasteSpecial(XlPasteType.xlPasteValues); |
Lösung:
Man muss in einen Worksheet.Range kopieren
//--< copy >-- active_Worksheet.UsedRange.Copy(); new_Worksheet.Cells[1,1].PasteSpecial(XlPasteType.xlPasteValues, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); //--</ copy >--
|
Lösung: funktionierender Copy-Code
Beschreibung: dieser Code kopiert unter Excel die aktuelle Excel.Sheet 1 und Speichert das Excelblatt als eine reine Werte-Datei in einer anderen Excel-Datei ab.
public void export_Sheet1() { //------------< export_Sheet1() >------------ //< init > Application excel_App =Globals.ThisAddIn.Application; Workbook active_Workbook = Globals.ThisAddIn.Application.ActiveWorkbook; Worksheet active_Worksheet = active_Workbook.Worksheets[1]; //</ init >
//< new > Workbook new_Workbook = excel_App.Workbooks.Add(); Worksheet new_Worksheet = new_Workbook.Worksheets[1]; //< new >
//--< copy >-- active_Worksheet.UsedRange.Copy(); new_Worksheet.Cells[1,1].PasteSpecial(XlPasteType.xlPasteValues, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); //--</ copy >--
//-< save >- string sFilename_New =active_Workbook.Path + "\\" + "Retouren_Daten"; if(File.Exists(sFilename_New) { File.Delete(sFilename_New); } new_Workbook.SaveAs(Filename:sFilename_New,ConflictResolution:XlSaveConflictResolution.xlLocalSessionChanges,AddToMru:false); //-</ save >-
//< end > new_Workbook.Close(); //</ end > //------------</ export_Sheet1() >------------ }
|
Fehlerhafter Beispiel Code
public void export_Sheet1() { //------------< export_Sheet1() >------------ //< init > Application excel_App =Globals.ThisAddIn.Application; Workbook active_Workbook = Globals.ThisAddIn.Application.ActiveWorkbook; Worksheet active_Worksheet = active_Workbook.Worksheets[1]; //</ init >
//< new > Workbook new_Workbook = excel_App.Workbooks.Add(); Worksheet new_Worksheet = new_Workbook.Worksheets[1]; //< new >
//--< copy >-- active_Worksheet.UsedRange.Copy(); new_Worksheet.Cells[1, 1].Select(); new_Worksheet.PasteSpecial(XlPasteType.xlPasteValues); //--</ copy >--
//-< save >- string sFilename_New=active_Workbook.Path + "\\" + "Retouren_Daten"; new_Workbook.SaveAs(sFilename_New); //-</ save >-
//< end > new_Workbook.Close(); //</ end > //------------</ export_Sheet1() >------------ }
|
Lösung:
Wegen der Formeln muss man die Länderspezifische Sprache einstellen.
Excel verwendet im Standard Englisch. Beim Copieren über vba, c# ist die spezifizierung nicht gegeben
Falsche Lösung:
Einstellung über Application->Assembly->Neutral language
Falsche Lösung im Internet:
Lösung laut Internet
set Application.Visible=true and Application.WindowState = XlWindowState.xlMinimized
The error code 0x800A03EC (or -2146827284) means NAME_NOT_FOUND
public void export_Sheet1() { //------------< export_Sheet1() >------------ //< init > Application excel_App =Globals.ThisAddIn.Application; Workbook active_Workbook = Globals.ThisAddIn.Application.ActiveWorkbook; Worksheet active_Worksheet = active_Workbook.Worksheets[1]; //</ init >
//< new > Application new_excel_App = Globals.ThisAddIn.Application; new_excel_App.Visible = false; //*solves: 0x800A03EC new_excel_App.WindowState = XlWindowState.xlMinimized; //*solves: 0x800A03EC Workbook new_Workbook = new_excel_App.Workbooks.Add(); Worksheet new_Worksheet = new_Workbook.Worksheets[1]; //< new >
//--< copy >-- active_Worksheet.UsedRange.Copy(); new_Worksheet.Cells[1, 1].Select(); //#ok new_Worksheet.Paste(); //*works //#Error: new_Worksheet.PasteSpecial(XlPasteType.xlPasteValues, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); new_Worksheet.PasteSpecial(Format:XlPasteType.xlPasteValues,Link:false); //->ERROR !!
//--</ copy >--
//-< save >- string sFilename_New =active_Workbook.Path + "\\" + "Retouren_Daten"; new_Workbook.SaveAs(sFilename_New); //-</ save >-
//< end > new_Workbook.Close(); new_excel_App.Quit(); //*solves: 0x800A03EC //</ end > //------------</ export_Sheet1() >------------ }
|
Falsche Lösung
System.Runtime.InteropServices.COMException HResult=0x800A03EC Message=Ausnahme von HRESULT: 0x800A03EC Source=<Cannot evaluate the exception source> StackTrace: <Cannot evaluate the exception stack trace>
|
Falsche Lösung aus dem Internet
//*using System.Globalization; //CultureInfo current_Culture = CultureInfo.CurrentUICulture; //typeof(Excel.Range).InvokeMember("Formula", // System.Reflection.BindingFlags.Public | // System.Reflection.BindingFlags.Instance | // System.Reflection.BindingFlags.SetProperty, // null, range1, // new object[] { "=SUM(10,20)" }, // System.Globalization.CultureInfo.GetCultureInfo(1033));
|
Falsche Lösung aus dem Internet
new_Worksheet.Cells[1, 1].Select(); //#ok new_Worksheet.Paste(); //*works //#Error: new_Worksheet.PasteSpecial(XlPasteType.xlPasteValues, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); //new_Worksheet.PasteSpecial(Format:XlPasteType.xlPasteValues,Link:false);
|
Falsche Lösung
Angeblich wäre die Lösung darin, dass man die Anwendung minimized ausführen soll
Application new_excel_App = Globals.ThisAddIn.Application; new_excel_App.Visible = false; //*solves: 0x800A03EC new_excel_App.WindowState = XlWindowState.xlMinimized; //*solves: 0x800A03EC
|