2017-01-25 43 views
0

我想將我的editShpID轉換爲int,以便我可以獲取它的ID並將其添加到列表中。我試過Convert.ToInt32,但它不會轉換,我不知道我怎麼能做到另一種方式。無法將類型'int'隱式轉換爲'Microsoft.Office.Interop.PowerPoint.Shape'

我的代碼是休閒。

  Microsoft.Office.Interop.PowerPoint.Shape editedShpID; 
      editedShpID = null; 

foreach (Microsoft.Office.Interop.PowerPoint.Shape editedShape in slide.Shapes) 
       { 
        if (editedShape.HasTextFrame == Microsoft.Office.Core.MsoTriState.msoTrue) 
        { 
         editedShp = editedShape; 
         var textFrame = editedShape.TextFrame; 
         if (textFrame.HasText == Microsoft.Office.Core.MsoTriState.msoTrue) 
         { 
          var textRange = textFrame.TextRange; 
          pps += editedShape.TextFrame.TextRange.Text; 
          foreach (char word in textRange) 
          { 

           l.Add(word); 
           Debug.WriteLine(word); 
          } 

         } 
        } 
        editedShpID = Convert.ToInt32(editedShape.Id); 
        editedShapesListID.Add(editedShpID); 

       } 
+0

'Microsoft.Office.Interop.PowerPoint.Shape editedShpID;' - 如果你希望它是一個'int'這是爲什麼了'Shape'?你可以不只是'editShapesListID.Add(Convert.ToInt32(editedShape.Id));'? –

+0

'editedShpID = Convert.ToInt32(editedShape.Id);'這是給我的問題,我希望能夠使用形狀屬性,這就是爲什麼我把它聲明爲形狀 –

+0

嗯,'Microsoft.Office。 Interop.PowerPoint.Shape'是一個Int64(long)(https://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.shape.id(v=office.14).aspx)所以,你應該使用一個很長的,而不是一個int。如果嘗試轉換,並且它的Int32.MaxValue或小於Int32.MinValue,則會得到一個「OverflowException」(https://msdn.microsoft.com/en-us/library/d4haekc4(v = vs.110).aspx) – Magnetron

回答

1

您試圖分配一個int到形狀物體,改變

Microsoft.Office.Interop.PowerPoint.Shape editedShpID; 

到:

int editedShpID; 

或做列表中添加,如:

editedShapesListID.Add(editedShape.Id); 
+0

我想使用'Microsoft.Office.Interop.PowerPoint.Shape'作爲我想能夠訪問的形狀屬性,我想使用變量'editShape',因爲它是我的foreach的一部分 –

+0

然後定義一個形狀列表不是整數,並且這樣做:editedShapesList.Add(editedShape); –

+0

我需要知道形狀ID,因爲我比較了2個獨立PowerPoint中的2個形狀列表,我需要通過檢查ID是否相同來進行比較 –

0

您的editedShpID(在第一行中聲明)爲Shape類型,並且您嘗試分配int。用正確的名字命名你的變量,你會再次感到困惑。

這裏是重命名變量代碼:

Microsoft.Office.Interop.PowerPoint.Shape editedShape; 
long editedShapeID; 
foreach (Microsoft.Office.Interop.PowerPoint.Shape slideShape in slide.Shapes) 
{ 
    if (slideShape.HasTextFrame == Microsoft.Office.Core.MsoTriState.msoTrue) 
    { 
     editedShape = slideShape; 
     var textFrame = slideShape.TextFrame; 
     if (textFrame.HasText == Microsoft.Office.Core.MsoTriState.msoTrue) 
     { 
      var textRange = textFrame.TextRange; 
      pps += slideShape.TextFrame.TextRange.Text; 
      foreach (char word in textRange) 
      { 
       l.Add(word); 
       Debug.WriteLine(word); 
      } 
     } 
    } 

    editedShapeID = editedShape.Id; 
    editedShapesListID.Add(editedShpeID); 
} 
+0

有什麼辦法可以保持它的形狀?我需要訪問其屬性來執行類似'editedShpID.TextFrame.TextRange.Font.Color.RGB'的操作,因爲我正在檢查Shape ID具有哪種顏色? –

+0

這是重點。將'editedShpID'的名稱更改爲'editedShp'並且更清晰。當你想存儲形狀Id時,創建一個'Int64'類型的變量並將其命名爲'editedShpID'。 – Reniuz

+0

@CraigGallagher我編輯了答案。稍微改了一些變量名。現在應該清楚什麼是我的意思。 – Reniuz

相關問題