HRESULT: 0x800A03EC - Il fonctionne sur ma machine de problème lors de la création de fichiers Excel
Je suis entrain de créer un document excel à l'aide de données provenant de mssql server dans mon asp.net application. Voici ma méthode:
[WebMethod]
public static string ExportToExcel(string sourcetype)
{
Microsoft.Office.Interop.Excel.Application oXL;
Microsoft.Office.Interop.Excel._Workbook oWB;
Microsoft.Office.Interop.Excel._Worksheet oSheet;
Microsoft.Office.Interop.Excel.Range oRng;
try
{
oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = false;
oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;
List<ExcelReport> dataToExport = APIClient.GetExcelReportData(Utility.getCurrentFilterId(), sourcetype);
oSheet.Cells[1, 1] = "Source";
oSheet.Cells[1, 2] = "UserName";
oSheet.Cells[1, 3] = "Name";
oSheet.Cells[1, 4] = "Message";
oSheet.Cells[1, 5] = "Title";
//oSheet.Cells[1, 6] = "Date";
int activeRow = 2;
for (int i = 0; i < dataToExport.Count; i++)
{
oSheet.Cells[activeRow, 1] = dataToExport[i].Source;
oSheet.Cells[activeRow, 2] = dataToExport[i].UserName;
oSheet.Cells[activeRow, 3] = dataToExport[i].Name;
oSheet.Cells[activeRow, 4] = dataToExport[i].Message;
oSheet.Cells[activeRow, 5] = dataToExport[i].MessageTitle;
//oSheet.Cells[activeRow, 6] = dataToExport[i].EntityDate;
activeRow++;
}
oSheet.get_Range("A1", "Z1").Font.Bold = true;
oSheet.get_Range("A1", "Z1").VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
oRng = oSheet.get_Range("A1", "Z1");
oRng.EntireColumn.AutoFit();
oXL.Visible = false;
oXL.UserControl = false;
string strFile = "report" + System.DateTime.Now.Ticks.ToString() + ".xls";
string strCurrentDir = HttpContext.Current.Server.MapPath(".") + "\\ExcelReports\\";
oWB.SaveAs(strCurrentDir + strFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, null, null, false,
false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, false, false, null, null, null);
//oWB.SaveCopyAs(strCurrentDir + strFile);
oWB.Close(null, null, null);
oXL.Workbooks.Close();
oXL.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oRng);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB);
oSheet = null;
oWB = null;
oXL = null;
GC.Collect(); //force final cleanup!
//errLabel.Text = "<A href=http://" + strMachineName + "/ExcelGen/" + strFile + ">Download Report</a>";
//string result = "<a href=\"~/ExcelReports/" + strFile + ">Raporu İndir</a>";
string result = "ExcelReports/" + strFile;
return result;
}
catch (Exception theException)
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat(errorMessage, theException.Message);
errorMessage = String.Concat(errorMessage, " Line: ");
errorMessage = String.Concat(errorMessage, theException.Source);
return errorMessage;
}
}
Il fonctionne très bien sur ma machine et le serveur d'application publié quand j'ai ouvert le code source dans vs 2010 et appuyez sur la touche F5. Mais si j'essaie d'accéder à mon application en utilisant le navigateur via IIS, je suis de HRESULT: 0x800A03EC erreur.
J'ai essayé la commande suivante:
appcmd set config -section:asp -enableParentPaths:true
J'ai essayé de donner des autorisations d'écriture pour mon dossier.
J'ai essayé de changer mon MS Excel paramètres de l'application de Services de Composants.
Mais pas moyen! Je ne pourrais pas obtenir de travail. Avez-vous une idée? Suis-je en train de faire une erreur dans la configuration?
Merci d'avance,
Puisque vous n'avez pas mentionné 0x800A03EC == ERROR_INVALID_FLAGS. Mais vous ne devriez pas être automatisation d'Excel à partir de IIS c'est ce n'est pas officiellement pris en charge depuis Excel suppose qu'il a un bureau interactif. Il y a beaucoup de XLS/XLSX bibliothèques de génération vous pouvez utiliser à la place.
OriginalL'auteur anilca | 2011-03-16
Vous devez vous connecter pour publier un commentaire.
J'ai reproduit votre problème.. tout essayé:
oWB.SaveAs
/oWB._SaveAs
/( oXL.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet ).SaveAs
/oWB.Application.ActiveWorkbook.SaveAs
tous jeter l'exception: HRESULT: 0x800A03EC...Mais j'ai rendez-vous essayé avec: oWB.SaveCopyAs(strCurrentDir + strFile);
et ça marche si je mets la suivante:
Pourquoi vous n'utilisez pas
SaveCopyAs
?Excellent. Excellent. Solution de contournement est toujours délicieux 😉 +1.
J'avais Windows 2008, Office 2003, un service windows qui s'exécute sous un utilisateur de domaine, qui a échoué au SaveAs ligne. Essayé SaveCopyAs (sans .Saved = true), et a eu une erreur similaire. Il a soudainement commencé à travailler afterI donné à tout le monde sur les autorisations C:\Users[Utilisateur] dossier (je sais que ce n'est pas bon, donc je pense que je devrais avoir donner l'accès à cet utilisateur Local et de l'Itinérance des dossiers).
OriginalL'auteur mastak
Faire un "Bureau" dossier comme ci-dessous
Cela peut être une réponse valable. Si vous pensez que c'est mal ou pas utile, alors vous pouvez downvote.
il est venu à moi par le biais de l'examen de la faible qualité des posts, et je les estime comme un commentaire parce que de deux points, d'abord, je pense que c'est un essai ou d'un coup pour une rapide solution au problème, et non s'acquitter de réponse, et un tel correctif dans un commentaire, le deuxième je crois qu'il faut apporter quelques précisions sur la façon dont sa réponse résout le problème de l'OP. Merci pour votre commentaire.
Oui, il y a beaucoup d'informations manquantes, mais ce n'en est pas Pas de Réponse. Il est peut-être juste une mauvaise réponse, mais vous ne savez jamais qui curiosités résoudre un Macrohard problème.
J'ai juste fait de mon mieux dans l'estimation de cette réponse de niveau, peut-être vous êtes plus d'expérience que moi dans ces postes, en tout cas merci pour votre astuce
OriginalL'auteur Siri How