• 主页

# 【求助】关于C#操作Excel.Range单元格计算

linxiamaomao 2012-05-28 10:20:23
object Cell0 = Excel.WorkSheet[1, 7]
Excel.Range = (Excel.Range)Excel.WorkSheet.get_Range(Cell0, Cell0)
object Cell1 = Excel.WorkSheet[18, 7] =======> 列需要循环100次~例如 G,H,I,J,K,L,M....
object Cell1 = Excel.WorkSheet[10001, 7] =========> 列需要循环100次~例如 G,H,I,J,K,L,M....
Excel.Range.Formula = "= AVERAGE" + "(" + Cell1 + ":" + Cell2 + ")"; =====> "=AVERAGE(G18:G10001)"

"= AVERAGE" + "(" + Cell1 + ":" + Cell2 + ")" 但是这样计算好像不能实现计算功能，请问应该如何去写呢？谢谢指点，在线等待。
...全文
277 点赞 收藏 13

13 条回复
linxiamaomao 2012年05月28日
getExcelColumnLabel(p0 - 1);

`````` /// <summary>
/// 根据列编号获取列别名
/// </summary>
/// <param name="num">列编号（从0开始）</param>
/// <returns></returns>
public static String getExcelColumnLabel(int num)
{
String temp = "";
double i = Math.Floor(Math.Log(25.0 * (num) / 26.0 + 1) / Math.Log(26)) + 1;
if (i > 1)
{
double sub = num - 26 * (Math.Pow(26, i - 1) - 1) / 25;
for (double j = i; j > 0; j--)
{
temp = temp + (char)(sub / Math.Pow(26, j - 1) + 65);
sub = sub % Math.Pow(26, j - 1);
}
}
else
{
temp = temp + (char)(num + 65);
}
return temp;
}``````

[Quote=引用 8 楼 的回复:]

[/Quote]这就是公式的难处，所以你需要逐行去循环添加公式，我之前就做了这个自动导出：
``````    //（计划总产出总数）和（差异数  量总数）的公式,填充 （装配 计划 工时）值
int p0 = 18;
int ExcelRowCount = 7 + dtExcel.Rows.Count;
for (DateTime DT = dtMin; DT <= dtMax; DT = DT.AddDays(1))
{

range = workSheet.get_Range(workSheet.Cells[2, p0], workSheet.Cells[2, p0]);
string sColumnLabel = getExcelColumnLabel(p0 - 1);
range.Formula = String.Concat("=SUM(", sColumnLabel + "8", ":", sColumnLabel + ExcelRowCount, ")");
range = workSheet.get_Range(workSheet.Cells[4, p0], workSheet.Cells[4, p0]);
range.Formula = String.Concat("=", sColumnLabel + "3", "-", sColumnLabel + "2");
range = workSheet.get_Range(workSheet.Cells[5, p0], workSheet.Cells[5, p0]);
foreach (DataRow dr in dtExcel.Rows)
{

string strdtColumnName = "SELFDate" + DT.ToShortDateString();
string strHourQTY = dr["PerHourQTY"].ToString();//产能数
string strQTY = dr[strdtColumnName].ToString();//排产数
if (string.IsNullOrEmpty(strHourQTY) || string.IsNullOrEmpty(strQTY))
{
continue;
}
else
{
}

}
{
}
p0++;
}``````

linxiamaomao 2012年05月28日
"=AVERAGE(G18:G10001)"

linxiamaomao 2012年05月28日

linxiamaomao 2012年05月28日
[Quote=引用 6 楼 的回复:]

[/Quote]

[Quote=引用 5 楼 的回复:]

[/Quote]你的描述不知所谓，无法帮忙

linxiamaomao 2012年05月28日

linxiamaomao 2012年05月28日

object Cell1 = Excel.WorkSheet[18, 7] =======> 列需要循环100次~例如 G,H,I,J,K,L,M....
object Cell2 = Excel.WorkSheet[10001, 7] =========> 列需要循环100次~例如 G,H,I,J,K,L,M....

linxiamaomao 2012年05月28日

linxiamaomao 2012年05月28日

C#

8.5w+

64.0w+

.NET技术 C#