技术开发 频道

详解VSTS与OFFICE的协同开发:Excel篇

  现在Visual Studio 2010中有了对可选参数的支持,整个代码简洁多了。

  当我们找到统计的起止范围后,我们就可以计算这个范围内的工作时间的总和。这里,为了展示对Excel的操作,我们使用Excel的求和公式SUM来计算这些单元格的和。

// 得到某个时间段内工作时间最多的员工的ID
private void buttonGet_Click(object sender, EventArgs e)
{
            
//  …

            
double fTotalTime = 0;
            
char cTotalIndex = 'A';
            
// 统计A到J列的总工作时间
            for (char cColIndex = 'B'; cColIndex < 'J'; ++cColIndex)
            {
                
// 构造单元格计算范围
                strCellFrom = cColIndex.ToString() + nFromIndex.ToString();
                strCellTo
= cColIndex.ToString() + nToIndex.ToString();

                
// 计算单元格范围内的总工作时间
                double fWorkTime = CalculateRange( strCellFrom, strCellTo);
              
// 记录较大的工作时间和单元格的列索引值
                if (fWorkTime > fTotalTime)
                {
                    fTotalTime
= fWorkTime;
                    cTotalIndex
= cColIndex;
                }
            }

            
// 得到工作时间最长的ID
             string strMessage;
            
string strID;
            
string strIDCellAddress = cTotalIndex.ToString() + Convert.ToString(1);
            Range IDRange
= Globals.Sheet1.Range[ strIDCellAddress];
            strID
= IDRange.Text.ToString();

            
// 构造输出消息
            strMessage = "" + comboBoxFrom.SelectedItem.ToString()
                
+ "" + comboBoxTo.SelectedItem.ToString() + "\n"
                
+ strID + "已经工作了" + fTotalTime + "小时。";  
            
// 显示消息框
            MessageBox.Show( strMessage );
}

// 计算单元格范围内的总工作时间
private double CalculateRange(string strCellFrom, string strCellTo)
{
            
// 创建NamedRange
            
// 使用一个临时单元格作为结果单元格
            NamedRange retRange =
                Globals.Sheet1.Controls.AddNamedRange(
                Globals.Sheet1.Range[
"A100"],
                
"RetRange" + strCellFrom + strCellTo);

            
// 构造Excel公式
            string strFormula;
            strFormula
= "=SUM(" + strCellFrom + ":" + strCellTo + ")";
            
// 设置结果单元格的公式
            retRange.Formula = strFormula;
            retRange.FormulaHidden
= true;

            
// 执行计算
            retRange.Calculate();

            
// 从结果单元格获取计算结果
            double fRet;
            
string strRet = retRange.Value2.ToString();
            fRet
= Convert.ToDouble( strRet );

            
return fRet;            
}

  这时,当我们在活动面板中选择时期范围,然后点击“查询”按钮,插件就会为我们统计这段时间范围内工作时间最多的员工ID,并以消息的形式报告给我们。


图10 Excel数据处理结果

  至此,我们已经完成了在Visual Studio 2010中开发三种Office插件应用的整个历程。强大的Visual Studio 2010给Office开发带来了新的动力,使得Office开发如虎添翼,成为一个成熟的并广为接受的开发平台。

0
相关文章