Có ai biết có trang web nào (thậm chí không phải của Microsoft) có thông tin chi tiết về COMExceptions/HRESULTS.
Khi tôi cố lưu sổ làm việc Excel của mình sau khi sử dụng hàm Copy(), tôi gặp lỗi này:
LỖI - Không thể SaveWorkbook()
System.Runtime.InteropServices.COMException (0x800A03EC): Tài liệu chưa được lưu.
Tái bút: Tôi đang thực hiện việc này trong một vòng lặp chặt chẽ gồm hơn 10K tệp và trong khi đọc các tệp hoạt động tốt, việc lưu chúng hóa ra chẳng có gì thú vị.
Ngoài ra, nếu ai gặp phải vấn đề tràn bộ nhớ Excel khi sử dụng hàm Copy(), vui lòng cho tôi biết.
Cảm ơn!
PSS Nếu ai cần làm rõ thêm xin vui lòng cho tôi biết
编辑 1
Đây là những gì đang xảy ra. Tôi đã được yêu cầu cập nhật một số tệp XLS (thực tế là hơn 10K) bằng cách sao chép trang sự kiện sang một trang tính mới (cùng một sổ làm việc) và cập nhật trang tính gốc bằng cách thực hiện một số chuyển đổi. Sự cố xảy ra khi tôi lưu sổ làm việc.
Dưới đây là một số đoạn trích từ ứng dụng của tôi:
///.... UpdateSpreadsheet() thường lệ
Microsoft.Office.Interop.Excel.Workbook wb = null;
thử
{
wb = ef.GetWorkbook(fileName, false, true);
}
catch (Exception ex)
{
logger.Error(ex.ToString());
}
Microsoft.Office.Interop.Excel.Worksheet ws = null;
thử
{
ws = wb.Sheets[Foo.WorksheetName] dưới dạng Microsoft.Office.Interop.Excel.Worksheet;
}
catch (Exception ex)
{
logger.Error(ex.ToString());
}
kết quả bool = sai;
nếu (ws != null)
result = ef.CopyWorksheet(ws, Foo.WorksheetName);
nếu (kết quả)
{
//... cập nhật trang tính cho phù hợp
}
thử
{
ef.SaveWorkbook(wb, fileName); // cuối cùng dòng này gặp sự cố, đó là ngẫu nhiên, nhưng cho đến nay sau tệp thứ 500, và tôi nhận được Ngoại lệ COM đó.
//.. cập nhật đối tượng Foo để phản ánh bảng tính đã sao chép
}
catch (Exception ex)
{
// có chuyện gì đó xảy ra nên không lưu được nên đóng và hủy sổ làm việc
logger.Error("Không thể SaveWorkbook()", ex);
}
finally
{
ef.DestoryWorkbook(wb, fileName);
ef.DestroyWorksheet(ws);
}
//// Phương thức CopyWorksheet()
public bool CopyWorksheet(Worksheet ws, String sourceSheet)
{
thử
{
thử
{
Trang tính = GetWorksheet(sourceSheet + " (2)");
// Tôi không nghĩ những điều dưới đây là cần thiết, nhưng tôi hoang tưởng về việc rò rỉ bộ nhớ
ExcelTools.OfficeUtil.ReleaseRCM(trang tính);
tờ = null;
trả về sai;
}
bắt (Ngoại lệ)
{
ws.Copy(Missing.Value, ws); //dòng này không bao giờ có lỗi
}
trả về đúng sự thật;
}
bắt (Ngoại lệ)
{
trả về sai;
}
finally
{
ws.Kích hoạt();
}
}
/// LưuWorkbook()
public void SaveWorkbook(Workbook wb)
{
nếu (wb != null)
{
wb.Save();
}
}
Nếu bạn chia nhỏ giá trị HRESULT, mã cơ sở làFACILITY_control
, mã lỗi là 1004. Từ một số tìm kiếm trực tuyến, có vẻ như mã này được tạo ra cho nhiều lỗi khác nhau, một số trong đó dường như có liên quan đến việc sao chép trang tính theo chương trình (xem ví dụ bài viết KB này).
Có thể hữu ích nếu bạn đăng thêm thông tin chi tiết về những gì bạn đang làm hoặc tìm kiếm trực tuyến HRESULT nàyVà xem những vấn đề mà người khác có thể gặp phải tương tự như những gì bạn đang làm.
Tôi là một lập trình viên xuất sắc, rất giỏi!