2012-06-19 8 views
5

Nhiệm vụ của tôi là đưa hình ảnh từ URL vào ô nhất định trong bảng tính excel. Tôi đang sử dụng NetOffice với C# để làm điều này.Làm cách nào để chèn ảnh vào ô excel?

Vấn đề chính của tôi là tôi không thể tìm cách chèn ảnh chính xác vào ô. Khi tôi sử dụng Sheet.Shapes.AddPicture(), tôi phải tính toán tọa độ nơi đặt ảnh của mình. Tất nhiên, tôi không có vấn đề gì với vấn đề này (tuy nhiên tôi đã tạo ra một số cách giải quyết), tôi muốn hỏi liệu cách tiếp cận của tôi để giải quyết vấn đề này là đúng hay có phương pháp nào khác mà tôi có thể chèn hình ảnh vào ô.

Dưới đây là cách giải quyết của tôi:

var floatLeft = FloatLeftPixelsCalculation(rowNumber); 
var floatTop = FloatTopPixelsCalculation(rowNumber); 
Worksheet.Shapes.AddPicture(urlCellValue, MsoTriState.msoFalse, MsoTriState.msoTrue, floatLeft, floatTop, PictureWidth, PictureHeight); 

public float FloatTopPixelsCalculation(int rowNumber) 
     { 
      float floatTop = 0; 
      for (var rNumber = 1; rNumber < rowNumber; rNumber++) 
      { 
       var cellHeight = Convert.ToSingle(Worksheet.Cells[rNumber, ColumnIndex].RowHeight); 
       floatTop = floatTop + cellHeight; 
      } 

      return floatTop; 
     } 

     public float FloatLeftPixelsCalculation(int rowNumber) 
     { 
      float floatLeft = 0; 
      for (var columnNumber = 1; columnNumber < ColumnIndex; columnNumber++) 
      { 
       var cellWidth = Convert.ToSingle(Worksheet.Cells[rowNumber, columnNumber].ColumnWidth); 
       floatLeft = floatLeft + cellWidth; 
      } 

      return floatLeft; 
     } 
+0

Theo như tôi biết, hình ảnh không đi trực tiếp bên trong các ô trong trang tính. Điều này được chứng minh bằng cách chèn một hình ảnh vào một bảng tính - thông báo đó là sorta "nổi" trên các tế bào - cùng với clip nghệ thuật, hình dạng, vv –

+1

Bạn không thể chèn bức ảnh vào các ô. Cách tiếp cận của bạn để sắp xếp chúng với tế bào, bằng cách sử dụng các thuộc tính trên cùng và bên trái, v.v., là chính xác. –

Trả lời

1

Mặc dù Doug Glancy là chính xác trong tuyên bố rằng Excel không xem xét một bức tranh là "bên trong" của một tế bào, một bức tranh có thể liên với một tế bào đặc biệt và sẽ hành động trực quan nếu được đặt chính xác.

Ví dụ: giả sử bạn có danh sách các ngôi nhà. Cột A-Y có nhiều thông tin về ngôi nhà và cột Z có hình ảnh ngôi nhà. Nếu hình ảnh được liên kết chính xác với các ô thích hợp, khi bạn sắp xếp, cắt, sao chép, dán các phạm vi, các hình ảnh sẽ hoạt động theo cách bạn mong đợi.

Để cho Excel để thao tác các nhà đúng cách, họ phải đáp ứng hai tiêu chí:

  1. Bức tranh phải hoàn toàn bên trong tế bào. Sử dụng mã của bạn ở trên, trước tiên bạn sẽ đặt hình ảnh như bạn có, và sau đó điều chỉnh chiều cao hàng và chiều rộng cột của ô được ít nhất bằng với chiều cao và chiều rộng của hình ảnh.

  2. Hình dạng. Thuộc tính vị trí phải được đặt thành xlMove hoặc xlMoveAndSize. Từ MS tài liệu, tài sản vị trí có thể là một trong những cách sau: xlFreeFloating (3) Object is free floating. xlMove (2) Object is moved with the cells. xlMoveAndSize (1) Object is moved and sized with the cells.

Nếu hình ảnh là hoàn toàn bên trong của tế bào và .Placement được thiết lập để xlMove hoặc xlMoveAndSize, sau đó bất cứ khi nào di chuyển tế bào container, hình ảnh sẽ di chuyển với nó. Nếu .Placement được đặt thành xlMoveandSize, thì hình ảnh sẽ mở rộng hoặc hợp đồng bất cứ khi nào chiều rộng hoặc chiều cao của ô được thay đổi. Điều này có thể hữu ích vì nó đảm bảo hình ảnh nằm bên trong ranh giới của ô. Nếu bạn sử dụng xlMoveandSize, bạn cũng có thể muốn xem xét đặt ShapeRange.LockAspectRatio = msoTrue để ngăn hình ảnh bị méo khi độ rộng cột hoặc chiều cao hàng được điều chỉnh.

Vì vậy, có, Virginia, bạn có thể đặt ảnh trong ô. Chỉ cần chắc chắn rằng bạn đặt nó một cách cẩn thận.