2011-06-10 49 views

回答

6

剛剛離開的CellValue爲空,實例化一個新CellFormula像這樣:

Cell cell = new Cell() 
{ 
    CellReference = "A3", 
    DataType = new EnumValue<CellValues>(CellValues.Number), 
    CellFormula = "SUM(A1:A2)" 
}; 

文檔在Excel

+1

我們怎樣才能做到不打開Excel。 – AjayR 2013-10-08 02:14:08

0

這個來自附幫助文檔打開時,細胞值來計算到用於Microsoft Office幫助文件的Open XML SDK 2.0,並對添加公式進行了一些修改。

Main()找到與一個片一個空白Excel文檔並添加SUM()式到小區A3

Sub Main() 
    Dim outputFilePath = "C:\Book1.xlsx" 
    Dim doc As SpreadsheetDocument = SpreadsheetDocument.Open(outputFilePath, True) 
    Dim workbookPart As WorkbookPart = doc.WorkbookPart 
    Dim worksheetPart As WorksheetPart = workbookPart.WorksheetParts.First() 

    InsertCellInWorksheet("A", 3, worksheetPart) 
End Sub 

' Given a column name, a row index, and a WorksheetPart, inserts a cell into the worksheet. 
' If the cell already exists, return it. 
Private Function InsertCellInWorksheet(ByVal columnName As String, ByVal rowIndex As  UInteger, ByVal worksheetPart As WorksheetPart) As Cell 
    Dim worksheet As Worksheet = worksheetPart.Worksheet 
    Dim sheetData As SheetData = worksheet.GetFirstChild(Of SheetData)() 
    Dim cellReference As String = (columnName + rowIndex.ToString()) 

    ' If the worksheet does not contain a row with the specified row index, insert one. 
    Dim row As Row 
    If (sheetData.Elements(Of Row).Where(Function(r) r.RowIndex.Value = rowIndex).Count() <> 0) Then 
     row = sheetData.Elements(Of Row).Where(Function(r) r.RowIndex.Value = rowIndex).First() 
    Else 
     row = New Row() 
     row.RowIndex = rowIndex 
     sheetData.Append(row) 
    End If 

    ' If there is not a cell with the specified column name, insert one. 
    If (row.Elements(Of Cell).Where(Function(c) c.CellReference.Value = columnName + rowIndex.ToString()).Count() > 0) Then 
     Return row.Elements(Of Cell).Where(Function(c) c.CellReference.Value = cellReference).First() 
    Else 
     ' Cells must be in sequential order according to CellReference. Determine where to insert the new cell. 
     Dim refCell As Cell = Nothing 
     For Each cell As Cell In row.Elements(Of Cell)() 
      If (String.Compare(cell.CellReference.Value, cellReference, True) > 0) Then 
       refCell = cell 
       Exit For 
      End If 
     Next 

     Dim newCell As Cell = New Cell 
     newCell.CellReference = cellReference 
     newCell.CellFormula = New CellFormula("SUM(A1:A2)") 

     row.InsertBefore(newCell, refCell) 
     worksheet.Save() 

     Return newCell 
    End If 
    End Function 

請注意,此方法假定您在公式中引用的每個單元格都具有正確標記的引用。

+0

我得到此代碼的構建錯誤。 CellValues。[Formula]和newCell.Formula不包含公式方法/ Props。你在使用OpenXML2.0嗎? – eschneider 2012-07-25 16:24:11

+0

我正在使用版本:2.0.5022.0 – eschneider 2012-07-25 16:26:27

+0

@eschneider更新了數據類型和公式,請立即嘗試。 – 2012-07-25 17:00:59

0

您可以設置模板Excel公式和編寫代碼來重新計算它們:

spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = True spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = True 
+0

它不起作用。 – AjayR 2013-10-08 02:14:58

+0

我在excel單元格中編寫我的所有公式,然後使用此代碼並運行。 – 2013-11-25 05:54:08

相關問題