2011-05-18 29 views
4

我能夠成功創建電子表格,並且我似乎通過代碼添加了圖像,問題是當我打開電子表格時,沒有圖像。這裏是我的代碼:Open XML SDK - 圖像沒有在excel中顯示

public static void CreateSpreadsheetWorkbook(string filepath) 
    { 
     SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook); 

     WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 
     workbookpart.Workbook = new Workbook(); 

     WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 
     worksheetPart.Worksheet = new Worksheet(new SheetData()); 

     Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); 
     Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" }; 
     sheets.Append(sheet); 

     string sImagePath = @"C:\temp\install_button.png"; 
     DrawingsPart drawingsPart = worksheetPart.AddNewPart<DrawingsPart>(); 

     ImagePart imagePart = drawingsPart.AddImagePart(ImagePartType.Png, worksheetPart.GetIdOfPart(drawingsPart)); 
     using (FileStream stream = new FileStream(sImagePath, FileMode.Open)) 
     { 
      imagePart.FeedData(stream); 
     } 

     workbookpart.Workbook.Save(); 
     spreadsheetDocument.Close(); 
    } 

感謝

斯圖

回答

7

通常當我想不通,爲什麼我用用Open XML SDK 2.0 Productivity Tool找出的Open XML SDK打交道時,事情不工作代碼應該是什麼。我通常會在Excel中創建一個空白工作表,添加一張圖片然後保存該文檔。然後,我將在Productivity工具中打開該文檔,然後單擊反射代碼按鈕以查看如何重新創建該文檔。我這樣做是爲了看看如何回答你的問題,得到了下面的代碼創建一個工作表部分:

 // Adds child parts and generates content of the specified part. 
     public void CreateWorksheetPart(WorksheetPart part) 
     { 
      DrawingsPart drawingsPart1 = part.AddNewPart<DrawingsPart>("rId2"); 
      GenerateDrawingsPart1Content(drawingsPart1); 

      ImagePart imagePart1 = drawingsPart1.AddNewPart<ImagePart>("image/png", "rId1"); 
      GenerateImagePart1Content(imagePart1); 

      SpreadsheetPrinterSettingsPart spreadsheetPrinterSettingsPart1 = part.AddNewPart<SpreadsheetPrinterSettingsPart>("rId1"); 
      GenerateSpreadsheetPrinterSettingsPart1Content(spreadsheetPrinterSettingsPart1); 

      GeneratePartContent(part); 
     } 

     // Generates content of drawingsPart1. 
     private void GenerateDrawingsPart1Content(DrawingsPart drawingsPart1) 
     { 
      Xdr.WorksheetDrawing worksheetDrawing1 = new Xdr.WorksheetDrawing(); 
      worksheetDrawing1.AddNamespaceDeclaration("xdr", "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"); 
      worksheetDrawing1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main"); 

      Xdr.TwoCellAnchor twoCellAnchor1 = new Xdr.TwoCellAnchor(){ EditAs = Xdr.EditAsValues.OneCell }; 

      Xdr.FromMarker fromMarker1 = new Xdr.FromMarker(); 
      Xdr.ColumnId columnId1 = new Xdr.ColumnId(); 
      columnId1.Text = "0"; 
      Xdr.ColumnOffset columnOffset1 = new Xdr.ColumnOffset(); 
      columnOffset1.Text = "0"; 
      Xdr.RowId rowId1 = new Xdr.RowId(); 
      rowId1.Text = "0"; 
      Xdr.RowOffset rowOffset1 = new Xdr.RowOffset(); 
      rowOffset1.Text = "0"; 

      fromMarker1.Append(columnId1); 
      fromMarker1.Append(columnOffset1); 
      fromMarker1.Append(rowId1); 
      fromMarker1.Append(rowOffset1); 

      Xdr.ToMarker toMarker1 = new Xdr.ToMarker(); 
      Xdr.ColumnId columnId2 = new Xdr.ColumnId(); 
      columnId2.Text = "0"; 
      Xdr.ColumnOffset columnOffset2 = new Xdr.ColumnOffset(); 
      columnOffset2.Text = "171429"; 
      Xdr.RowId rowId2 = new Xdr.RowId(); 
      rowId2.Text = "0"; 
      Xdr.RowOffset rowOffset2 = new Xdr.RowOffset(); 
      rowOffset2.Text = "171429"; 

      toMarker1.Append(columnId2); 
      toMarker1.Append(columnOffset2); 
      toMarker1.Append(rowId2); 
      toMarker1.Append(rowOffset2); 

      Xdr.Picture picture1 = new Xdr.Picture(); 

      Xdr.NonVisualPictureProperties nonVisualPictureProperties1 = new Xdr.NonVisualPictureProperties(); 
      Xdr.NonVisualDrawingProperties nonVisualDrawingProperties1 = new Xdr.NonVisualDrawingProperties(){ Id = (UInt32Value)2U, Name = "Picture 1", Description = "eprs_reports_arrow.png" }; 

      Xdr.NonVisualPictureDrawingProperties nonVisualPictureDrawingProperties1 = new Xdr.NonVisualPictureDrawingProperties(); 
      A.PictureLocks pictureLocks1 = new A.PictureLocks(){ NoChangeAspect = true }; 

      nonVisualPictureDrawingProperties1.Append(pictureLocks1); 

      nonVisualPictureProperties1.Append(nonVisualDrawingProperties1); 
      nonVisualPictureProperties1.Append(nonVisualPictureDrawingProperties1); 

      Xdr.BlipFill blipFill1 = new Xdr.BlipFill(); 

      A.Blip blip1 = new A.Blip(){ Embed = "rId1", CompressionState = A.BlipCompressionValues.Print }; 
      blip1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"); 

      A.Stretch stretch1 = new A.Stretch(); 
      A.FillRectangle fillRectangle1 = new A.FillRectangle(); 

      stretch1.Append(fillRectangle1); 

      blipFill1.Append(blip1); 
      blipFill1.Append(stretch1); 

      Xdr.ShapeProperties shapeProperties1 = new Xdr.ShapeProperties(); 

      A.Transform2D transform2D1 = new A.Transform2D(); 
      A.Offset offset1 = new A.Offset(){ X = 0L, Y = 0L }; 
      A.Extents extents1 = new A.Extents(){ Cx = 171429L, Cy = 171429L }; 

      transform2D1.Append(offset1); 
      transform2D1.Append(extents1); 

      A.PresetGeometry presetGeometry1 = new A.PresetGeometry(){ Preset = A.ShapeTypeValues.Rectangle }; 
      A.AdjustValueList adjustValueList1 = new A.AdjustValueList(); 

      presetGeometry1.Append(adjustValueList1); 

      shapeProperties1.Append(transform2D1); 
      shapeProperties1.Append(presetGeometry1); 

      picture1.Append(nonVisualPictureProperties1); 
      picture1.Append(blipFill1); 
      picture1.Append(shapeProperties1); 
      Xdr.ClientData clientData1 = new Xdr.ClientData(); 

      twoCellAnchor1.Append(fromMarker1); 
      twoCellAnchor1.Append(toMarker1); 
      twoCellAnchor1.Append(picture1); 
      twoCellAnchor1.Append(clientData1); 

      worksheetDrawing1.Append(twoCellAnchor1); 

      drawingsPart1.WorksheetDrawing = worksheetDrawing1; 
     } 

     // Generates content of imagePart1. 
     private void GenerateImagePart1Content(ImagePart imagePart1) 
     { 
      System.IO.Stream data = GetBinaryDataStream(imagePart1Data); 
      imagePart1.FeedData(data); 
      data.Close(); 
     } 

     // Generates content of spreadsheetPrinterSettingsPart1. 
     private void GenerateSpreadsheetPrinterSettingsPart1Content(SpreadsheetPrinterSettingsPart spreadsheetPrinterSettingsPart1) 
     { 
      System.IO.Stream data = GetBinaryDataStream(spreadsheetPrinterSettingsPart1Data); 
      spreadsheetPrinterSettingsPart1.FeedData(data); 
      data.Close(); 
     } 

     // Generates content of part. 
     private void GeneratePartContent(WorksheetPart part) 
     { 
      Worksheet worksheet1 = new Worksheet(); 
      worksheet1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"); 
      SheetDimension sheetDimension1 = new SheetDimension(){ Reference = "A1" }; 

      SheetViews sheetViews1 = new SheetViews(); 
      SheetView sheetView1 = new SheetView(){ TabSelected = true, WorkbookViewId = (UInt32Value)0U }; 

      sheetViews1.Append(sheetView1); 
      SheetFormatProperties sheetFormatProperties1 = new SheetFormatProperties(){ DefaultRowHeight = 15D }; 
      SheetData sheetData1 = new SheetData(); 
      PageMargins pageMargins1 = new PageMargins(){ Left = 0.7D, Right = 0.7D, Top = 0.75D, Bottom = 0.75D, Header = 0.3D, Footer = 0.3D }; 
      PageSetup pageSetup1 = new PageSetup(){ Orientation = OrientationValues.Portrait, Id = "rId1" }; 
      Drawing drawing1 = new Drawing(){ Id = "rId2" }; 

      worksheet1.Append(sheetDimension1); 
      worksheet1.Append(sheetViews1); 
      worksheet1.Append(sheetFormatProperties1); 
      worksheet1.Append(sheetData1); 
      worksheet1.Append(pageMargins1); 
      worksheet1.Append(pageSetup1); 
      worksheet1.Append(drawing1); 

      part.Worksheet = worksheet1; 
     } 

     #region Binary Data 
     private string imagePart1Data ="lots of binary data here"; 

     private System.IO.Stream GetBinaryDataStream(string base64String) 
     { 
      return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String)); 
     } 

     #endregion 

我建議你做同樣的你的形象,爲了得到它玩的生成代碼工作,因爲你可以看到只是添加一張圖片到一個新的幻燈片是很多代碼。

+0

感謝amurra。這真的很有用! – hoakey 2011-05-19 13:19:19

+0

驚人的不知道生產力工具,謝謝! – timi2shoes 2018-03-02 16:19:46