假設你有一個excel文件,有大量的數字和行,大約有100行。(C# - Excel)如何將公式寫入每個現有行的新創建列?
我想以編程方式編寫一個公式列,爲每個現有行添加一堆字段的值。
所以首先,我會爲Excel文件創建Openfiledialog,找到路徑,通過OleDb打開它。明白了這一點。現在說我有下表:
[朋友| Money |失去的錢|天過去了|解決方案]
比爾博,50,50,7,*化合物這裏
Bilso,80,50,7,*化合物這裏
等等
問題是,我不沒有確切的行數,所以我必須枚舉OleDb連接發現的任何東西。 該公式可能類似於=(B2-C2)* D2,但是2也是錯誤的,它必須與它所在的任何行相關,即:第3行將爲=(B3-C3)* D3。我不知道如何做到這一點。
我發現直接寫入單元格並不會使公式直接處理數字。
=====
編輯:
private Excel.Application Xls;
private Excel.Workbooks WBs;
private Excel.Workbook WB;
private Excel.Worksheet WS;
private Excel.Sheets SS;
Excel.Range cellsRange = null;
Excel.Range columnRange = null;
Excel.Range rowRange = null;
int numberOfColumns = 0;
int numberOfRows = 0;
private void btnColumn_Click(object sender, EventArgs e)
{
if (btnColumn.FlatStyle == FlatStyle.Flat)
btnColumn.FlatStyle = FlatStyle.Standard;
else
{
btnColumn.FlatStyle = FlatStyle.Flat;
}
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
openFileDialog.ShowDialog();
string pather = openFileDialog.FileName;
if (pather == "" || pather == " " || pather == null)
{
return;
}
if (!string.IsNullOrEmpty(openFileDialog.FileName))
{
try
{
Xls = new Excel.Application();
WBs = Xls.Workbooks;
WB = WBs.Open(pather, 0, false, 5, "", "", true,
XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
SS = WB.Worksheets;
WS = SS.get_Item(1);
cellsRange = WS.Cells;
columnRange = cellsRange.Columns;
rowRange = cellsRange.Rows;
numberOfColumns = columnRange.Count;
numberOfRows = rowRange.Count;
int LastCell = numberOfColumns+1;
WS.Cells[1, LastCell] = "Tax Formula";
for (int i = 2; i < numberOfRows; i++)
{
//string niceFormula = "=SUM(L" + i + ",M" + i + ")*N"+ i ;
//WS.Cells[i, LastCell].Formula = niceFormula;
WS.Cells[i, LastCell].Value = (WS.Cells[i, 12] + WS.Cells[i, 13]) * WS.Cells[i, 14];
}
//==========================
WB.Save();
}
catch (Exception ex)
{
MessageBox.Show("Write Excel: " + ex.Message);
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
WB.Close();
Xls.Quit();
releaseObject(cellsRange);
releaseObject(columnRange);
releaseObject(rowRange);
releaseObject(SS);
releaseObject(WS);
releaseObject(WBs);
releaseObject(WB);
releaseObject(Xls);
}
MessageBox.Show("Finished Updating File", "Task complete");
}
}
任何人都知道爲什麼這個代碼在寫入嘗試拋出下面的錯誤?
HRESULT:0x800A03EC爲您提供方便
Repasted全部代碼。它仍在吐出HRESULT錯誤。
目標項目是4行深,1行標題和約16列寬。
這將是緩慢通過一個處理每個單元格值之一。我建議你將Excel中的全部數據導入數據表中,並進行計算(使用LINQ或常規循環),並將計算值添加到同一數據表中的新列中。最後以所需的格式將數據表導出到Excel工作表。 –
你沒有告訴我們,你怎麼寫日期。 VBA?或Excel Interop的Winform應用程序?還是帶有EPPlus的WinForm應用程序?請詳細說明。 – nabuchodonossor
@nabuchodonossor,我最初將它打開,因爲有時候有人會準備好VBA答案,但會被C#標記關閉。在某些情況下,我可以將自己的邏輯轉換成適合C#的邏輯,這樣就會有更多的總體答案,但是,這是Winform和Excel Interop。 – Aroueterra