【求助】关于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 + ")" 但是这样计算好像不能实现计算功能,请问应该如何去写呢?谢谢指点,在线等待。
...全文
674 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
linxiamaomao 2012-05-28
  • 打赏
  • 举报
回复
getExcelColumnLabel(p0 - 1);

这个方法能给我看一下吗?
蔡袅 2012-05-28
  • 打赏
  • 举报
回复
这里还有个将列编号转换为,字母编号:
 /// <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;
}

思路是这样,你不能通过一行解决全部,必须针对所有行赋予公式。
蔡袅 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 6 楼 的回复:
引用 5 楼 的回复:

高人在何处,,,出现一下吧!怎么让我获取会变化的列去进行计算呢?
你的描述不知所谓,无法帮忙


好吧,我简单表述一下,我需要从G列开始每一列的第一行经行计算

一般的Excel表格,单元格计算不是这样写的吗?G1 = "=AVERAGE(G18:G10001)"
在C#程式中是这样表达的 这里的Excel.Range就代表……
[/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]);
double dAleradyWorkHour = 0.0d;
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
{
dAleradyWorkHour = dAleradyWorkHour + double.Parse(strQTY) * 1.00 / double.Parse(strHourQTY);
}

}
if (dAleradyWorkHour > 0.1d)
{
range.Cells[1, 1] = dAleradyWorkHour.ToString("N2");
}
p0++;
}



linxiamaomao 2012-05-28
  • 打赏
  • 举报
回复
"=AVERAGE(G18:G10001)"

我想让单元格经行这样的计算,但是不知道怎么去写!
linxiamaomao 2012-05-28
  • 打赏
  • 举报
回复
因为列是不断的去经行变化的,所以需要用Cell去获取列和行的坐标,
但是用Cell是无法去经行计算的。
linxiamaomao 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:

高人在何处,,,出现一下吧!怎么让我获取会变化的列去进行计算呢?
你的描述不知所谓,无法帮忙
[/Quote]

好吧,我简单表述一下,我需要从G列开始每一列的第一行经行计算

一般的Excel表格,单元格计算不是这样写的吗?G1 = "=AVERAGE(G18:G10001)"
在C#程式中是这样表达的 这里的Excel.Range就代表G1, Excel.Range.Formula = =AVERAGE(G18:G10001)"
但是我这里的G需要不断的变化G,H,I,J,K,L,M....

这样能懂了吗?
蔡袅 2012-05-28
  • 打赏
  • 举报
回复
你要问问题,不是不停地着急而是想尽办法干净利落的把问题描述清楚
蔡袅 2012-05-28
  • 打赏
  • 举报
回复
[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....
阿拉敏敏 2012-05-28
  • 打赏
  • 举报
回复
看不懂。
linxiamaomao 2012-05-28
  • 打赏
  • 举报
回复
请问是看得懂还是看不懂啊?都回一句话啊!让我看到点希望!
linxiamaomao 2012-05-28
  • 打赏
  • 举报
回复
补充: 就这样的计算后单元格结果是 =AVERAGE(System.__ComObject:System.__ComObject)

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧