gpt4 book ai didi

c# - HRESULT 异常 : 0x800A03EC Error While creating Excel file

转载 作者:太空宇宙 更新时间:2023-11-03 13:02:13 25 4
gpt4 key购买 nike

我创建了 Windows 服务,它需要每 2 小时创建 Excel。但是它给我一个错误如下

Exception from HRESULT: 0x800A03EC

第一次它创建 excel 文件。但第二次它给出错误。尝试了很多东西但都失败了。请帮助我。

Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005.

此错误也会在第一个错误出现后出现。

public void WriteExcel()
{
string ExcelGen = "ExcelGen";
try
{
string fileNm = DateTime.Now.ToString("dd-MM-yyyy_HH") + ".xls";
string path = AppDomain.CurrentDomain.BaseDirectory + "Uploads\\" + fileNm;
string ServiceDbName = ConfigurationManager.AppSettings["ServiceDBName"].ToString();
string ServiceLMName = ConfigurationManager.AppSettings["ServiceTable"].ToString();
int Cnt = Service1.Counter;

Service1.AddLog("EXCEL STEP 1");
Microsoft.Office.Interop.Excel.Application objexcelapp = new Microsoft.Office.Interop.Excel.Application();
objexcelapp.Application.Workbooks.Add(Type.Missing);
objexcelapp.Columns.ColumnWidth = 25;
Service1.AddLog("EXCEL STEP 1.1");
MySqlConnection Conn = new MySqlConnection(ConfigurationManager.AppSettings["Conn"].ToString());
MySqlCommand inCmd = new MySqlCommand("select HT_LeadCode as 'LeadCode',right(lead_phone1,10) as 'Mobile',idg_fnc_GetDispositionDescription(lead_service_id, lead_last_dial_status) as 'Status' from " + ServiceDbName + "." + ServiceLMName + " where lead_status ='F' and HT_LeadCode <> '' and ifnull(HT_UpldFlag,'N') = 'N'", Conn);
Conn.Open();
DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter(inCmd);
da.Fill(ds);
Service1.AddLog( "EXCEL STEP 2");
string leadCodes = "";
foreach (System.Data.DataTable table in ds.Tables)
{
for (int i = 1; i < table.Columns.Count + 1; i++)
{
Service1.AddLog(" i : " + i.ToString());
objexcelapp.Cells[1, i] = table.Columns[i - 1].ColumnName;
}

for (int j = 1; j < table.Rows.Count+1; j++)
{
for (int k = 1; k < table.Columns.Count+1; k++)
{
Service1.AddLog("j & k : " + j.ToString()+ " & " + k.ToString());
objexcelapp.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
if(k==0)
leadCodes += table.Rows[j].ItemArray[k].ToString() + ",";
}
}
}
Service1.AddLog("LeadCodes : "+leadCodes);
leadCodes = leadCodes.Substring(0, leadCodes.Length - 1);
Service1.AddLog("LeadCodes : " + leadCodes);

inCmd = new MySqlCommand("update " + ServiceDbName + "." + ServiceLMName + " set HT_UpldFlag = 'Y' where lead_status ='F' and HT_LeadCode <> '' and ifnull(HT_UpldFlag,'N') = 'N' ", Conn);
inCmd.ExecuteNonQuery();

Service1.AddLog( "EXCEL STEP 3");
Service1.AddLog( "'" + path + "'" + " File is Created");
objexcelapp.ActiveWorkbook.SaveCopyAs(path);
objexcelapp.ActiveWorkbook.Saved = true;
objexcelapp.Quit();
Conn.Close();
Service1.AddLog( "EXCEL STEP 4");
Service1.AddLog( "UPLOAD THREAD STARTING");
Activity act = new Activity();

act.Upload();
}
catch (Exception ex)
{
Service1.AddLog( "WriteExcel Err : " + ex.Message);
}
}

当我运行服务时,它是第一次创建 excel 文件,但在间隔发生时。它给出了上述错误。

最佳答案

吞咽。

我已经多次看到 0x800A03EC 错误,它可能意味着任何事情......

你可能想试试这个......

  • 获取此 free C# library 的副本使用创建 .xlsx 文件OpenXML 库,而不是 VSTO。它使用 OpenXmlWriter 库写入文件,因此如果有大量数据,您不会遇到内存不足的问题。

  • 像以前一样通过填充 ds 数据集创建 Excel 文件,然后使用一行代码:

    CreateExcelFile.CreateExcelDocument(ds, "你的Excel文件名.xlsx");

如果您不想走这条路,我建议您处理掉 objexcelapp 变量。这是一个 COM 对象,如果您不专门将其杀死,它可能会保持打开/使用状态。

if (objexcelapp != null)
Marshal.ReleaseComObject(objexcelapp);

多年来我们遇到了很多 VSTO 问题,现在,尽可能少地使用它。

希望这对您有所帮助。

关于c# - HRESULT 异常 : 0x800A03EC Error While creating Excel file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com