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
|