Visual Studio 2010 (VB.Net) ve Open XML SDK 2.0 kullanıyorum. Bir Excel 2010 çalışma sayfasına nasıl formül eklersiniz? Bunu yaptığımda, hücrenin CellValue özelliğini, kullanıcı çalışma bloğunu açtığı zaman hücreyi yeniden hesaplamak için Excel'i zorlamak için DBNull veya EmptyString'e ayarlamak istiyorum.Açık XML kullanma Excel 2010 çalışma sayfasına nasıl bir formül eklersiniz?
cevap
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
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.
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
Kullanıyorum: 2.0.5022.0 – eschneider
@eschneider Güncelleme DataType ve Formula, lütfen şimdi deneyin. –
ş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
çalışmıyor. – AjayR
Tüm formülümü excel hücrelerinde yazdım, sonra bu kodu kullanıyorum ve çalışıyor. –
nasıl excel açmadan yapabilirsiniz. – AjayR