Tôi có một ứng dụng web ASP.NET 2.0 sẽ tải lên tệp ppt và sau đó trích xuất trang trình bày của nó thành hình ảnh. Cho rằng tôi đã nhập khẩu office.dll và Microsoft.Office.Interop.PowerPoint.dll hội và viết đoạn mã sauCác sự cố với tự động hóa văn phòng trong asp.net. Tôi có thể sử dụng các lựa chọn thay thế như văn phòng mở, nếu tôi biết cách
public static int ExtractImages(string ppt, string targetPath, int width, int height)
{
var pptApplication = new ApplicationClass();
var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
var slides = new List<string>();
for (var i = 1; i <= pptPresentation.Slides.Count; i++)
{
var target = string.Format(targetPath, i);
pptPresentation.Slides[i].Export(target, "jpg", width, height);
slides.Add(new FileInfo(target).Name);
}
pptPresentation.Close();
return slides.Count;
}
Nếu tôi chạy mã này trong máy tính cục bộ của tôi, trong asp.net hoặc thực thi, nó chạy hoàn hảo. Nhưng nếu tôi cố gắng chạy nó trong máy chủ sản xuất, tôi nhận được lỗi sau:
System.Runtime.InteropServices.COMException (0x80004005): PowerPoint could not open the file. at Microsoft.Office.Interop.PowerPoint.Presentations.Open(String FileName, MsoTriState ReadOnly, MsoTriState Untitled, MsoTriState WithWindow) at PPTImageExtractor.PptConversor.ExtractImages(String caminhoPpt, String caminhoDestino, Int32 largura, Int32 altura, String caminhoThumbs, Int32 larguraThumb, Int32 alturaThumb, Boolean geraXml) at Upload.ProcessRequest(HttpContext context)
Quá trình này đang chạy với người sử dụng NT AUTHORITY \ NETWORK SERVICE. IIS được cấu hình để sử dụng xác thực ẩn danh. Người dùng nặc danh là một quản trị viên, tôi thiết lập nó như thế này để cho phép ứng dụng chạy mà không phải lo lắng về các điều khoản.
Trong máy phát triển của tôi, tôi có văn phòng 2010 beta1. Tôi đã thử nghiệm với thực thi trong một máy tính với văn phòng 2007 là tốt. Và nếu tôi chạy mã từ thực thi trong máy chủ, với văn phòng 2003 được cài đặt, nó chạy hoàn hảo.
Để đảm bảo rằng sẽ không có bất kỳ vấn đề nào với quyền, mọi người trong máy chủ đều có quyền truy cập đầy đủ vào trang web. Trang web đang chạy trong IIS7 và Chế độ cổ điển.
Tôi cũng nghe nói rằng Open-office có API có thể thực hiện việc này, nhưng tôi không thể tìm thấy bất kỳ điều gì về nó. Tôi không nhớ bằng cách sử dụng DLLImport để làm những gì tôi phải làm và tôi có thể cài đặt mở văn phòng trên máy chủ web. Đừng lo lắng về việc viết lại phương thức này, miễn là các tham số đều giống nhau, mọi thứ sẽ hoạt động.
Tôi đánh giá cao sự trợ giúp của bạn.
Đừng bao giờ sử dụng Office Interop từ một ứng dụng ASP.NET. Xem [Cân nhắc cho Tự động hóa phía máy chủ của Office] (http://support.microsoft.com/kb/257757) –