2011-06-10 12 views

cevap

6

Sadece öylesine gibi yeni bir CellFormula boş olarak CellValue bırakın ve örneğini:

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

belge Excel

+1

nasıl excel açmadan yapabilirsiniz. – AjayR

0

Bu ekli Yardım Belgesi geldiği açıldığında hücreler değeri hesaplanacaktır Formül eklemek için bazı değişikliklerle birlikte Microsoft Office yardım dosyası için Açık XML SDK 2.0'a.

Main()bir yaprak boş bir Excel belgesi bulur ve A3 hücre SUM() formül ekler.

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 

Bu yöntemin, formülde başvuruda bulunduğunuz her hücrenin doğru şekilde etiketlenmiş bir referansı olduğunu varsayar.

+0

Bu kod için hatalar yapıyorum. CellValues. [Formula] ve newCell.Formula bir Formül metodu/Props içermez. OpenXML2.0 kullanıyor musunuz? – eschneider

+0

Kullanıyorum: 2.0.5022.0 – eschneider

+0

@eschneider Güncelleme DataType ve Formula, lütfen şimdi deneyin. –

0

şablon excel formülü koyup bunlara yeniden hesaplamak için bu kodu yazabilirsiniz:

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

çalışmıyor. – AjayR

+0

Tüm formülümü excel hücrelerinde yazdım, sonra bu kodu kullanıyorum ve çalışıyor. –