Tự động chèn hình ảnh và văn bản vào PowerPoint

(cập nhật ngày 16/07/2013)

Bài viết này trình bày cách tạo ứng dụng chèn tự động hình ảnh và văn bản vào tập tin trình chiếu PowerPoint bằng C#. Ở đây ta giả sử mỗi ảnh sẽ được chèn vào từng slide riêng lẻ.

Chuẩn bị

  • MS Visual Studio 2010, C#
  • Microsoft Office

Thực hiện

Add reference các mục sau:

  • Microsoft.Office.Interop.PowerPoint (nằm trong thẻ .NET của hộp thoại Add Reference)
  • Microsoft Office 15.0 Object Library (nằm trong thẻ COM của hộp thoại Add Reference)

Tùy vào phiên bản Office cài đặt trên máy mà các reference trên có thể có phiên bản khác (bài viết này thử nghiệm trên máy cài MS Office 2013).

Khai báo thư viện trong code

using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;
using System.Security;

Trên form, tạo một button Embed picture(s) to PPT. Viết code cho button này như sau:

[code language=”csharp”]
private void btnEmbedPicture_Click(object sender, EventArgs e)
{
// khai báo biến hộp thoại mở tập tin
OpenFileDialog dialog = new OpenFileDialog();

// thiết lập cho hộp thoại chỉ mở các tập tin hình ảnh
dialog.Filter =
"Images (*.bmp;*.gif;*.jpg;*.png)|*.bmp;*.gif;*.jpg;*.png|" +
"All files (*.*)|*.*";

// cho phép người dùng chọn nhiều tập tin cùng lúc
dialog.Multiselect = true;

dialog.Title = "Chọn các tập tin hình ảnh";

// hiển thị hộp thoại để người dùng chọn tập tin
DialogResult dr = dialog.ShowDialog();

if (dr == DialogResult.OK)
{
// khai báo biến đại diện cho chương trình PowerPoint
Microsoft.Office.Interop.PowerPoint.Application pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();

// tạo tập tin trình chiếu
Presentation pptPresentation = pptApplication.Presentations.Add(MsoTriState.msoTrue);
Microsoft.Office.Interop.PowerPoint.CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText];

// các biến đại diện cho slide
Slides slides = pptPresentation.Slides;
_Slide slide;

// số thứ tự của mỗi slide
int slideNumber = 0;

TextRange objText;

// đọc từng tập tin
foreach (String ImageFileName in dialog.FileNames)
{
try
{
// thêm 1 slide mới
slideNumber++;
slide = slides.AddSlide(slideNumber, customLayout);

// chèn thêm phần tiêu đề ở đầu slide
objText = slide.Shapes[1].TextFrame.TextRange;
objText.Font.Name = "Arial";
objText.Font.Size = 32;
objText.Text = "Hình thứ " + slideNumber.ToString();

// tạo một shape có kích thước và vị trí giống shape 2 để chèn ảnh vào
Microsoft.Office.Interop.PowerPoint.Shape shape = slide.Shapes[2];

// chèn ảnh vào shape vừa tạo
slide.Shapes.AddPicture(ImageFileName, MsoTriState.msoFalse, MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);

// chèn chú thích vào slide
slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = "Đây là phần chú thích cho slide " + slideNumber.ToString();

// lưu tập tin
pptPresentation.SaveAs(@"D:\myppt.pptx", Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);

//pptPresentation.Close();
//pptApplication.Quit();
}
catch (SecurityException ex)
{
// người dùng không có quyền (permission) đọc tập tin, đường dẫn,…
MessageBox.Show("Lỗi bảo mật.\n\n"
+ "Error message: " + ex.Message + "\n\n"
+ "Details:" + ex.StackTrace);
}
catch (Exception ex)
{
// không thể load ảnh
MessageBox.Show("Gặp lỗi tại ảnh này: " + ImageFileName.Substring(ImageFileName.LastIndexOf(‘\\’))
+ ".\n\n Chưa rõ nguyên do lỗi.\n\n"
+ "Reported error: " + ex.Message);
}
}

}
}
[/code]

Khi chạy chương trình, PowerPoint sẽ được mở lên, văn bản và các tập tin ảnh sẽ lần lượt được chèn vào. Để tăng tốc độ, ta có thể bỏ đi các dòng lệnh nhúng (embed) font chữ objText.Font.Name = “Arial”; objText.Font.Size = 32;. Sau khi chèn xong, tập tin trình chiếu sẽ được lưu lại.

Dòng lệnh pptPresentation.Close(); có tác dụng: sau khi lưu tập tin trình chiếu xong, PowerPoint sẽ đóng tập tin nhưng không đóng cửa sổ chương trình PowerPoint.

Dòng lệnh pptApplication.Quit(); có tác dụng: sau khi lưu tập tin trình chiếu xong, PowerPoint sẽ đóng tập tin và đóng luôn cửa sổ chương trình PowerPoint.

FacebookMessenger

Leave a Reply