VSTO(Excel相关)的C#代码

使用Range属性

this.Range["A3:F6, B1:C5"].Select();

使用Cells属性

  for(int icell=1;icell<=100;icell++)
     {
  this.Application.Worksheets[2].cells[icell, 1].value = icell;
     }

使用快捷记号

#N/A

使用Offset属性

this.Range["A1:A3"].Offset[3, 3].Select();

使用Resize属性

this.Range["A1"].Resize[3, 3].Select();

使用Union属性

this.Application.Union(this.Range["A1:D4"], this.Range["E5:H8"]).Select();

使用UsedRange属性

this.UsedRange.Select();

使用CurrentRegion属性

this.Range["A5"].CurrentRegion.Select();

使用Select方法

this.Application.Worksheets[3].Activate();
this.Application.Worksheets[3].Range["A1:B10"].Select();

使用Activate方法

this.Application.Worksheets[3].Activate();
this.Application.Worksheets[3].Range["A1:B10"].Activate();
//此处的代码,可以运行,但是只会选中A1这一个单元格

使用Goto方法

this.Application.Goto(this.Application.Worksheets[3].Range["A1:B10"], true);

获得指定行,列中的最后一个非空单元格

Excel.Range rng = this.Range["A65535"].End[Excel.XlDirection.xlUp];
    MessageBox.Show("A列中最后一个非空单元格是" + rng.Address[0, 0] + ",行号" + rng.Row.ToString() + ",数值" + rng.Text);

定位单元格

 Excel.Range rng = this.UsedRange.SpecialCells(Excel.XlCellType.xlCellTypeFormulas);
     rng.Select();
     MessageBox.Show("工作表中有公式的单元格为:" + rng.Address);

查找单元格

Excel.Range rng, Rng;
    Rng = this.Range["A:A"];
    string strFind = textBox1.Text;
    if (strFind.Trim() != string.Empty)
     {
  rng = Rng.Find(strFind, Rng.Cells[Rng.Cells.Count], Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false);
  if (rng != null)
  {
      this.Application.Goto(rng, true);
  }
  else
  {
      MessageBox.Show("没有找到单元格!");
  }
      }	
	//C#中没有InputBox,这里用文本框代替,另,C#中没有with……End with语句.

查找单元格重复数据

  Excel.Range rng, Rng;
     string FindAddress = string.Empty;
     Rng = this.Range["A:A"];
     string strFind = textBox1.Text;
     if (strFind.Trim() != string.Empty)
     {
  rng = Rng.Find(strFind, Rng.Cells[Rng.Cells.Count], Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false);
  if (rng != null)
  {
      FindAddress = rng.Address;
      do
      {
   rng.Interior.ColorIndex=6;
   rng=Rng.FindNext(rng);
      }while(rng != null && rng.Address != FindAddress);
     
  }

     }

使用Like运算符

 // C#中没有Like运算符,可以用正则表达式来处理.

替换单元格内字符串

this.Range["A1:A5"].Replace("通州", "南通");

复制单元格区域

this.Application.DisplayAlerts = false;
     this.Range["A1"].CurrentRegion.Copy(this.Application.Worksheets[2].Range["A1"]);
     this.Application.DisplayAlerts = true;

复制单元格区域时带列宽大小

this.Range["A1"].CurrentRegion.Copy();
     Excel.Range rng = this.Application.Worksheets[3].Range["A1"];
     rng.PasteSpecial(Excel.XlPasteType.xlPasteColumnWidths);
     rng.PasteSpecial(Excel.XlPasteType.xlPasteAll);
     this.Application.CutCopyMode = Excel.XlCutCopyMode.xlCut;

使用选择性粘贴

this.Range["A1"].CurrentRegion.Copy();
     Excel.Range rng = this.Application.Worksheets[3].Range["A1"];
     rng.PasteSpecial(Excel.XlPasteType.xlPasteValues);
     this.Application.CutCopyMode = Excel.XlCutCopyMode.xlCut;

直接赋值的方法

Excel.Range rng = this.Application.Worksheets[3].Range["A1"];
    Excel.Range Rng = this.Range["A1"].CurrentRegion;
    rng.Resize[Rng.Rows.Count, Rng.Columns.Count].Value = Rng.Value;

单元格自动进入编辑状态

先在”VSTO 设计器生成的代码”内加入
this.SelectionChange += new Excel.DocEvents_SelectionChangeEventHandler(工作表1_SelectionChange);
然后在事件代码中输入
  if (Target.Column == 3 && Target.Count == 1)
      {
        if (Target.Text == string.Empty)
          {
            this.Application.SendKeys("{F2}");
           }
       }

禁用单元格拖放功能

if (this.Application.Intersect(Target, this.Range["A1:A15"]) != null)
            {
                this.Application.CellDragAndDrop = false;
            }
            else
            {
                this.Application.CellDragAndDrop = true;
            }

单元格字体格式设置

Excel.Font rng = this.Range["A1"].Font;
    rng.Name = "宋体";
    rng.FontStyle = "Bold";
    rng.Size = 18;
    rng.ColorIndex = 3;
    rng.Underline = 2;

设置单元格内部格式

Excel.Interior rng = this.Range["A1"].Interior;
rng.ColorIndex = 3;
rng.Pattern = Excel.XlPattern.xlPatternCrissCross;
rng.PatternColorIndex = 6;

为单元格区域添加边框

 Excel.Borders rng = this.Range["B4:G10"].Borders;
   rng.LineStyle = Excel.XlLineStyle.xlContinuous;
   rng.Weight = Excel.XlBorderWeight.xlThin;
   rng.ColorIndex = 5;
   Excel.XlColorIndex col = (Excel.XlColorIndex)5;
   this.Range["B4:G10"].BorderAround2(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium,col);

为单元格区域应用多种边框格式

  Excel.XlColorIndex col = (Excel.XlColorIndex)5;
    Excel.Border rng = this.Range["B4:G10"].Borders[Excel.XlBordersIndex.xlInsideHorizontal];
    Excel.Border Rng = this.Range["B4:G10"].Borders[Excel.XlBordersIndex.xlInsideVertical];
    rng.LineStyle = Excel.XlLineStyle.xlDot;
    rng.Weight = Excel.XlBorderWeight.xlThin;
    rng.ColorIndex = col;
    Rng.LineStyle = Excel.XlLineStyle.xlContinuous;
    Rng.Weight = Excel.XlBorderWeight.xlThin;
    Rng.ColorIndex = col;
    this.Range["B4:G10"].BorderAround2(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, col);

灵活设计单元格的行高列宽

  Excel.Range rng1 = this.Range["A1"];
    Excel.Range rng2 = this.Range["B1"];
    rng1.RowHeight = this.Application.CentimetersToPoints(2);
    rng1.ColumnWidth = this.Application.CentimetersToPoints(1.5);
    rng2.RowHeight = this.Application.CentimetersToPoints(1.2);
    rng2.ColumnWidth = this.Application.CentimetersToPoints(0.3);

单元格中建立数据有效性

  Excel.Range rng = this.Range["A1:A10"];
    rng.Validation.Delete();
    rng.Validation.Add(
Excel.XlDVType.xlValidateList,
Excel.XlDVAlertStyle.xlValidAlertStop,
Excel.XlFormatConditionOperator.xlBetween,
"1,2,3,4,5,6,7,8");

判断单元格是否存在数据有效性

   try
    {
if (this.Range["A12"].Validation.Type >= 0)
{
    		MessageBox.Show("单元格中有数据有效性!");
}
    }
    catch
    	{


MessageBox.Show("单元格中沒有数据有效性!");
    }

动态的数据有效性

void 工作表1_SelectionChange(Excel.Range Target)
{
    	if (Target.Column == 1 && Target.Count == 1 && Target.Row > 1)
    {
Target.Validation.Delete();
Target.Validation.Add(
    			Excel.XlDVType.xlValidateList,
    			Excel.XlDVAlertStyle.xlValidAlertStop,
    			Excel.XlFormatConditionOperator.xlBetween,
    			"主機,显示器");
    }
}

自动展开数据有效性下拉列表

this.Application.SendKeys("%{down}");

在单元格中写入公式

this.Range["C1:C10"].Formula="=sum(A1,B1)";

写入单元格区域数组公式

this.Range["C1"].FormulaArray = "=A1:A2*B1:B2";

检查单元格是否含有公式

   Excel.Range rng = this.Application.Selection;
   if (Convert.IsDBNull(rng.HasFormula))
     {
       MessageBox.Show("公式区域為:" + rng.SpecialCells(Excel.XlCellType.xlCellTypeFormulas, 23).Address[0, 0]);
     }
     else if(rng.HasFormula)
     {
       MessageBox.Show("全部单元格為公式!");
     }
     else
     {
       MessageBox.Show("全部单元格不為公式!");
     }
   // 注:因為HasFormula返回的是一个dynamic類型的值,C#的swith貌似并不支持.

判断单元格公式是否存在错误

未研究出来,如何调用用VBA.IsError,用了Excel自带函数来处理的.
Excel.Range rng = this.Range["A1"].Offset[0, 1];
rng.Formula = "=iserror(A1)";
if (rng.Value)
  {
      MessageBox.Show("A1单元格錯誤類型為:" + this.Range["A1"].Text);
   }
   else
   {
      MessageBox.Show("A1单元格結果為:" + this.Range["A1"].Text);
   }

取得单元格中公式的引用单元格

Excel.Range rng = this.Range["C1"].Precedents;
 MessageBox.Show("公式所引用的单元格有:" + rng.Address);

將单元格中的公式转换为数值

   Excel.Range rng = this.Range["C1:C10"];
     rng.Formula = "=sum(A1:B1)";
     rng.Value = rng.Value;

判断单元格是否存在批注

if (this.Range["A1"].Comment == null)
   {
     MessageBox.Show("A1单元格中沒有批注");
   }
   else
   {
     MessageBox.Show("A1单元格中批注內容为:" + "\n" + this.Range["A1"].Comment.Text());
   }

为单元格添加批注

 Excel.Range rng = this.Range["A1"];
    if (rng.Comment == null)
     {
        rng.AddComment(rng.Text);
        rng.Comment.Visible = true;
     }

删除单元格中的批注

   Excel.Range rng = this.Range["A1"];
   if (rng.Comment != null)
    {
      rng.Comment.Delete();
    }

判断单元格区域是否存在合并单元格

  Excel.Range rng = this.Application.Selection;
    if (Convert.IsDBNull(rng.MergeCells))
     {
       MessageBox.Show("区域中包含合并单元格!");
     }
     else if (rng.MergeCells)
     {
       MessageBox.Show("区域中全部為合并单元格!");
     }
     else
     {
       MessageBox.Show("区域中沒有合并单元格!");
     }

合并单元格时连接每个单元格的文本

  Excel.Range rng = this.Application.Selection;
  string s = string.Empty;
  foreach(Excel.Range Rng in rng)
   {
     s = s + Rng.Text;
   }
  this.Application.DisplayAlerts = false;
  rng.Merge();
  rng.Value = s;
  this.Application.DisplayAlerts = true;

合并內容相同的连续单元格

 int rEnd = this.Range["A65535"].End[Excel.XlDirection.xlUp].Row;
  this.Application.DisplayAlerts = false;
  for (int i = rEnd; i >= 2; i--)
  {
     Excel.Range rng = this.Cells[i, 1];
     if (rng.Value == rng.Offset[-1, 0].Value)
       {
         this.Application.Union(rng, rng.Offset[-1, 0]).Merge();
       }
  }

取消合并单元格时在每个单元格中保留內容

 int rEnd = this.Range["A65535"].End[Excel.XlDirection.xlUp].Row;
 int m = this.Cells[rEnd, 1].MergeArea.Count-1;
 this.Range[Cells[1, 1], Cells[rEnd, 1]].UnMerge();
 this.Application.DisplayAlerts = false;
 for (int i = 1; i < rEnd+m; i++)
   {
     Excel.Range rng = this.Cells[i, 1];
     if (rng.Offset[1, 0].Text == string.Empty)
       {
         rng.Offset[1, 0].Value = rng.Value;
        }
   }

高亮显示单元格区域

Excel.Range rng = this.Application.Selection;
Cells.Interior.ColorIndex = Excel.XlColorIndex.xlColorIndexNone;
rng.Interior.ColorIndex = 8;

双击被保护单元格时不显示提示消息框

 if (Target.Locked)
   {
     MessageBox.Show("此单元格已保护,不能編輯");
     Cancel = true;
   }

重新计算工作表指定区域

Excel.XlCalculation oldCalcultion = this.Application.Calculation;
this.Application.Calculation = Excel.XlCalculation.xlCalculationManual;
this.Range["A1:D10"].Calculate();
this.Application.Calculation = oldCalcultion;

录入数据后单元格自动保护

if (this.ProtectContents)
 {
   this.Unprotect("123456");
 }
 if (Target.Text != string.Empty)
  {
    Target.Locked = true;
    this.Protect("123456");
  }

使用单元格的Address属性

if (Target.Address[0,0]=="A1")
{
 MessageBox.Show("你选择了A1单元格");
}

使用Column属性和Row属性

 int i=0;
 if (Target.Column == 1 && Target.Row < 11 && int.TryParse(Target.Text,out i))
 {
   Target.Offset[0, 1].Value = i * 3;
 }

使用Intersect方法

Excel.Range rng = this.Application.Intersect(Target, this.Application.Union(this.Range["A1:A10"], this.Range["C1:C10"]));
if (rng != null)
 {
   MessageBox.Show("你选择了" + Target.Address[0, 0] + "单元格");

使用工作表的名称

this.Application.Worksheets["工作表2"].Activate();

使用工作的索引号

this.Application.Worksheets[2].Activate();

使用工作表的代码名称

MessageBox.Show(this.Application.ActiveSheet.CodeName); 

用ActiveSheet属性引用活动工作表

  this.Application.Worksheets[2].Select();
    MessageBox.Show( this.Application.ActiveSheet.Name);

选择工作表的方法

this.Application.Worksheets[2].Select();
this.Application.Worksheets[2].Activate(); 

使用For遍历工作表

  int wkCount = this.Application.Worksheets.Count;
  string s = string.Empty;
  for (int i = 1; i <= wkCount; i++)
   {
     s = s + this.Application.Worksheets[i].Name + "\n";
   }
  MessageBox.Show("工作簿中含有以下工作表:" + "\n" + s);

使用ForEach语句

 string s = string.Empty;
 foreach (Excel.Worksheet wk in this.Application.Worksheets)
  {
    s = s + wk.Name + "\n";
  }
 MessageBox.Show("工作簿中含有以下工作表:" + "\n" + s);

在工作表中向下翻页

 Excel.Sheets shs=Globals.ThisWorkbook.Worksheets;
  Excel.Worksheet wkThis = shs.Application.ActiveSheet;
  Excel.Worksheet wkNext;
  int wkIndex = wkThis.Index;
  int wkCount = shs.Count;
  if (wkIndex < wkCount)
    {
      wkNext = (Excel.Worksheet)wkThis.Next;
      wkNext.Select();
    }

工作表的添加与删除

Excel.Sheets wksThis = this.Application.Worksheets;
    Excel.Worksheet wsAdd = this.Application.Worksheets.Add(System.Type.Missing, wksThis[wksThis.Count]);
wsAdd.Name = "数据";

批量添加工作表

  Excel.Sheets wksThis = this.Application.Worksheets;
   Excel.Worksheet wksNew = null;
   if (wksThis.Count <= 3)
     {
        for (int i = 1; i <= 10; i++)
          {
            wksNew = wksThis.Add(System.Type.Missing, wksThis[wksThis.Count]);
            wksNew.Name = "第" + i.ToString() + "个工作表";
           }
       }

禁止删除指定工作表

  Office.CommandBarControl cmdCtl =this.Application.CommandBars[41].Controls[2];
	//可以找到删除按钮,但是无法禁止,也无法加载单击事件,非常奇怪.
    //而且在Office 2010里,也无法禁用某个按钮,但是整个菜单是可以的.  

自动建立工作表目录

 int i = this.Application.Worksheets.Count;
   for (int n = 1; n <= i; n++)
   {
     this.Cells[n+1, 1].Value = this.Application.Worksheets[n].Name;
   }

建立工作表链接

int m = this.Application.Worksheets.Count;
if (Target.Count == 1)
 {
   if (Target.Column==1)
     {
       if (Target.Row>1 && Target.Row<=(m+1))
          {
           this.Application.Sheets[Target.Value].Select();
          }
      }
    }

工作表的深度隐藏

this.Application.Sheets[2].Visible = Excel.XlSheetVisibility.xlSheetVeryHidden;

防止更改工作表的名称

 void ThisWorkbook_BeforeClose(ref bool Cancel)
        {
            if (this.Sheets[1].Name != "Excel Home")
            {
                this.Sheets[1].Name = "Excel Home";
            }
            this.Save();
        }

工作表中一次插入多行

Excel.Range rng = this.Rows[3];
   rng.Resize[3].Insert();

删除工作表中的空行

 Excel.Range rng = this.UsedRange;
   int rngEnd = this.Cells[rng.Rows.Count,rng.Columns.Count].End[Excel.XlDirection.xlUp].Row;
   for (int i = rngEnd; i >=1; i++)
   {
      if (this.Application.WorksheetFunction.CountA(this.Rows[i]) == 0)
       {
         this.Rows[i].Delete();
       }
   }

删除工作表的重复行

 int rngEnd = this.Range["A65535"].End[Excel.XlDirection.xlUp].Row;
    for (int i = rngEnd; i>=1; i--)
     {
       if (this.Application.WorksheetFunction.CountIf(this.Columns[1], this.Cells[i, 1]) > 1)
        {
          this.Rows[i].Delete();
        }
     }
            

定位删除特定内容所在的行(删除A列中包含”Excel”字符的行

 this.Application.DisplayAlerts = false;
   int rngEnd = this.Range["A65535"].End[Excel.XlDirection.xlUp].Row;
   string str = "Excel.*";
   for (int i = rngEnd; i >= 1; i--)
    {
      Excel.Range rng = this.Cells[i, 1];
      if (Regex.IsMatch(rng.Text, str))
       {
         this.Rows[i].Delete();
       }
    }:需引用using System.Text.RegularExpressions;

判断是否选中整行

int i = this.Columns.Count;
    Excel.Range rng = this.Application.Selection;
    if (rng.Columns.Count == i)
     {
       MessageBox.Show("你选中了一整行");
     }
     else
      {
        MessageBox.Show("你没有选中了一整行");
      }

限制工作表的滚动区域

this.ScrollArea = "B4:H12";

复制自动筛选后的数据区域

 this.Application.Worksheets[2].Cells.Clear();
 if (this.FilterMode)
  {
    this.AutoFilter.Range.SpecialCells(Excel.XlCellType.xlCellTypeVisible).Copy(
    this.Application.Worksheets[2].Cells[1, 1]);
  }

使用高级筛选获得不重复记录

  Excel.Range rngSheet2 = this.Application.Worksheets[2].Cells;
  rngSheet2.Clear();
  this.Range["A1"].CurrentRegion.AdvancedFilter(
                Excel.XlFilterAction.xlFilterCopy,
                System.Type.Missing,
                this.Application.Worksheets[2].Cells[1, 1],
                true);

工作表的保护与解除保护

this.Unprotect("12345");
  this.Cells[1,1].Value=100;
  this.Protect("12345");

奇偶页打印

 int pg = this.PageSetup.Pages.Count;
 for (int i = 1; i <= pg; i=i+2)
  {
    this.PrintOutEx(1, i);
}

使用工作簿的名称

string str = this.Application.Workbooks["工作簿的引用方法.xlsx"].Path;
 MessageBox.Show(str);

使用ThisWorkbook

this.Application.ThisWorkbook.Close(false);

使用ActiveWorkbook

MessageBox.Show(this.Application.ActiveWorkbook.Name);

新建工作簿

 Excel.Workbook Nowbook;
 string[] shName = new string[4] { "余额", "单价", "数量", "金额" };
 string[] arr = new string[12] { "01月", "02月", "03月", "04月", "05月", "06月", "07月", "08月", "09月", "10月", "11月", "12月" };
  this.Application.SheetsInNewWorkbook = 4;
  Nowbook = this.Application.Workbooks.Add();
  for (int i = 1; i <= 4; i++)
   {
     Nowbook.Sheets[i].Name = shName[i - 1];
     Nowbook.Sheets[i].Range["B1"].Resize[1, arr.Length] = arr;
     Nowbook.Sheets[i].Range["B2"] = "品名";
   }
  Nowbook.SaveAs("C:\\"  +"存货明细.xlsx");
  Nowbook.Close(true);

打开指定的工作簿

 int wkCount = this.Application.Workbooks.Count;
 for (int i = 1; i <= wkCount; i++)
  {
    if (this.Application.Workbooks[i].Name == "123.xlsx")
     {
       MessageBox.Show("123工作簿已经打开");
     }               
 }
this.Application.Workbooks.Open("C:\\" + "123.xlsx");

使用公式不打开工作簿取得其他工作簿数据

 if (File.Exists("C:\\11.xlsx"))
            {
                string Temp = string.Empty;
                Temp = "\'C:\\[11.xlsx]工作表1\'!";
                Excel.Range rng = this.Range["A1:F22"];
                rng.FormulaR1C1 = "=" + Temp + "RC";
            }

使用GetObject函数

//C#中貌似沒有GetObject函数

隱藏Application對象

  Excel.Application myApp = new Excel.Application();
            Excel.Worksheet sh;
            string Temp ="C:\\11.xlsx";
            myApp.Visible = false;
            sh = myApp.Workbooks.Open(Temp).Sheets[1];
            Excel.Range rng = sh.Range["A1"].CurrentRegion;
            this.Range["A1"].Resize[rng.Rows.Count, rng.Columns.Count].Value = rng.Value;

使用ExecuteExcel4Macro方法

 private void button1_Click(object sender, EventArgs e)
        {
            object Rcout, Ccout;      // ExecuteExcel4Macro返回值為object類型
            String temp, temp1, temp2, temp3;
            object[,] arr;
            temp = "\'C:\\[11.xlsx]工作表1\'!";
            temp1=temp + this.Rows[1].Address[
                System.Type.Missing,
                System.Type.Missing,
                Excel.XlReferenceStyle.xlR1C1];
            temp1 = "Counta(" + temp1 + ")";
            Ccout = this.Application.ExecuteExcel4Macro(temp1);
            temp2 = temp + this.Columns["A"].Address[
                System.Type.Missing,
                System.Type.Missing,
                Excel.XlReferenceStyle.xlR1C1];
            temp2 = "Counta(" + temp2 + ")";
            Rcout = this.Application.ExecuteExcel4Macro(temp2);
            int R = int.Parse(Rcout.ToString());    //將object轉為int
            int C = int.Parse(Ccout.ToString());
            arr = new object[R,C];
            for(int m=0;m<R;m++)        //C#数組下標為0
            {
                for (int n = 0; n <C; n++)
                {
                    temp3 = temp + this.Cells[m+1,n+1].Address[
                       System.Type.Missing,
                       System.Type.Missing,
                       Excel.XlReferenceStyle.xlR1C1];
                    arr[m, n] = this.Application.ExecuteExcel4Macro(temp3);  
                }
            }
            this.Range["A1"].Resize[R, C].Value = arr;
        }

使用SQL連接

private void button1_Click(object sender, EventArgs e)
        {
            DataSet DS = ExcelOpen("C:\\11.xlsx");
            DataTable DT = new DataTable();
            DT = DS.Tables[0];
            if (DT != null)
            {
                for (int m = 0; m < DT.Rows.Count; m++)
                {
                    for (int n = 0; n < DT.Columns.Count; n++)
                    {
                        this.Cells[m + 1, n + 1].Value = DT.Rows[m][n].ToString();
                    }
                }
            }
        }
        private DataSet ExcelOpen(string str)   //讀取一個Excel,并返回一個DataSet
        {
            string ConnStr;
            ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + str + " ;Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"";
            OleDbConnection ExcelConn = new OleDbConnection(ConnStr);
            try
            {
                ExcelConn.Open();
                if (ExcelConn.State == ConnectionState.Open)
                {
                    OleDbDataAdapter ExcelDA = new OleDbDataAdapter("select * from [工作表1$]", ExcelConn);     //這里我只讀取了工作表1的数据,如果需要讀取其它工作表,可以將工作表名設置為ExcelOpen的一個參数
                    DataSet ExcelDS = new DataSet();
                    ExcelDA.Fill(ExcelDS);
                    ExcelConn.Close();
                    return ExcelDS;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("提示信息:" + ex.ToString());
                return null;
            }
        }

返回窗口的可視區域地址

string str;
            str = this.Application.ActiveWindow.VisibleRange.Address[0, 0];
            MessageBox.Show("窗品的可視區域為:" + str);

在工作表中添加图形

Excel.Shape myShape;
            try
            {
                this.Shapes.Item("myShape").Delete();
            }
            catch
            {
            }
            myShape = this.Shapes.AddShape(
                    Office.MsoAutoShapeType.msoShapeRectangle,
                    40, 120, 280, 30);
            myShape.Name = "myShape";
            Excel.Characters myCharacters = myShape.TextFrame.Characters();
            myCharacters.Text = "單擊將選擇工作表2!";
            myCharacters.Font.Name = "新細明體";
            myCharacters.Font.Size = 22;
            myCharacters.Font.ColorIndex = 7;
            myShape.TextFrame.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
            myShape.TextFrame.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
            myShape.Placement = Excel.XlPlacement.xlFreeFloating;
            myShape.Select();
            Excel.ShapeRange myShapeRng = this.Application.Selection.ShapeRange;
            myShapeRng.Line.Weight = 1;
            myShapeRng.Line.DashStyle = Office.MsoLineDashStyle.msoLineSolid;
            myShapeRng.Line.Style = Office.MsoLineStyle.msoLineSingle;
            myShapeRng.Line.Transparency = 0;
            myShapeRng.Line.Visible = Office.MsoTriState.msoTrue;
            myShapeRng.Line.ForeColor.SchemeColor = 40;
            myShapeRng.Line.BackColor.RGB = 65536 * 255 + 256 * 255 + 255;  //RGB=65536*B + 256*G + R
            myShapeRng.Fill.Transparency = 0;
            myShapeRng.Fill.Visible = Office.MsoTriState.msoTrue;
            myShapeRng.Fill.ForeColor.SchemeColor = 41;
            myShapeRng.Fill.OneColorGradient(
                Office.MsoGradientStyle.msoGradientHorizontal,
                4, 0.23F);       //OneColorGradient第三個參数為Float,C#中默認0.23為double,所以需要在0.23后面加上F,指定為Float
            this.Range["A1"].Select();
            this.Hyperlinks.Add(myShape, "", "工作表2!A1", "選擇工作表2!");

导出出工作表中的图片

 string FileName = string.Empty;
            Excel.ChartObjects chartObjs = (Excel.ChartObjects)this.ChartObjects(missing);
            
            foreach (Excel.Shape myShape in this.Shapes)
            {
                FileName = "C:\\" + myShape.Name + ".gif";
                myShape.Copy();
                Excel.Chart myChart = chartObjs.Add(0, 0, myShape.Width + 28, myShape.Height + 30).Chart;
                myChart.Paste();
                myChart.Export(FileName, "gif");
                myChart.Parent.Delete();
            }

在工作表中添加艺术字

 Excel.Shape myShape;
            try
            {
                this.Shapes.Item("myShape").Delete();
            }
            catch
            {
            }
            myShape = this.Shapes.AddTextEffect(
                Office.MsoPresetTextEffect.msoTextEffect15,
                "我愛Excel Home",
                "新細明體",
                36,
                Office.MsoTriState.msoFalse,
                Office.MsoTriState.msoFalse,
                100, 100);
            myShape.Name = "myShape";
            myShape.Fill.Solid();
            myShape.Fill.ForeColor.SchemeColor = 55;
            myShape.Fill.Transparency = 0;
            myShape.Line.Weight = 1.5F;
            myShape.Line.DashStyle = Office.MsoLineDashStyle.msoLineSolid;
            myShape.Line.Style = Office.MsoLineStyle.msoLineSingle;
            myShape.Line.Transparency = 0;
            myShape.Line.ForeColor.SchemeColor = 12;
            myShape.Line.BackColor.RGB = 65536 * 255 + 256 * 255 + 255;
        }

遍历工作表中的图片

int i = this.Shapes.Count;
            for (int m = 1; m <= i; m++)
            {
                this.Cells[m, 1].Value = this.Shapes.Item(m).Name;
            }

移动、旋转图片

Excel.Shape myShape = this.Shapes.Item(2);
            for (int m = 1; m <= 300; m = m + 5)
            {
                myShape.Top = (float)System.Math.Sin(m * (3.1416 / 180)) * 100 + 100;
                myShape.Left = (float)System.Math.Cos(m * (3.1416 / 180)) * 100 + 100;
                myShape.Fill.ForeColor.RGB = m * 100;
                for (int n = 1; n <= 10; n++)
                {
                    myShape.IncrementRotation(-2);
                    
                }
            }
//沒找到資料如何調用VBA內置函数DoEvents

工作表中自动插入图片

 string FilePath;
            Excel.Range rng;
            string temp = string.Empty;
            for (int i = 3; i <= this.Range["A65535"].End[Excel.XlDirection.xlUp].Row; i++)
            {
                FilePath = "C:\\Users\\Public\\Pictures\\Sample Pictures\\" + this.Cells[i, 1].Text + ".jpg";
                if (File.Exists(FilePath))
                {
                    rng = this.Cells[i, 3];
                    this.Shapes.AddPicture(FilePath,
                        Office.MsoTriState.msoTrue,
                        Office.MsoTriState.msoTrue,
                        rng.Left + 1,
                        rng.Top + 1,
                        rng.Width + 1,
                        rng.Height + 1);
                }
                else
                {
                    temp = temp + "\n" + this.Cells[i, 1].Text ;
                }
            }
            if (temp != string.Empty)
            {
                MessageBox.Show(temp + "\n" + "沒有照片");
            }

特别鸣谢:Excelhome论坛的a5658805朋友辛劳整理及测试。

资料来源地址:http://club.excelhome.net/thread-1200539-1-1.html

  • 10
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Excel聚光灯VSTO代码是一种基于Visual Studio Tools for Office (VSTO)的Excel开发工具,它提供了一种方便快捷的方式来编写和管理Excel中的宏代码。使用Excel聚光灯VSTO代码,我们可以利用.NET框架和C#语言来编写高效、可靠的Excel插件,实现各种复杂的功能和操作。 Excel聚光灯VSTO代码可以用于创建自定义的Excel工具栏、菜单和按钮,实现对Excel文件的自动化处理和数据分析,以及与其他系统的数据交互和集成。通过VSTO代码,我们可以访问Excel的各种对象、属性和方法,实现自定义的数据处理、报表生成和图表展示等功能,极大地扩展了Excel的应用范围和能力。 另外,Excel聚光灯VSTO代码还可以实现对Excel的事件处理和扩展,如单元格数值变化、工作表切换、工作簿保存等事件的监测和处理,提供了更加灵活和强大的Excel开发环境。同时,借助VSTO代码,我们可以通过可定制的用户界面和交互式操作,简化用户在Excel中的数据处理和操作流程,提高工作效率和体验。 总的来说,Excel聚光灯VSTO代码是一种高效、灵活的Excel开发工具,它为我们提供了丰富的功能和接口,可以帮助我们更好地开发和定制Excel应用,满足各种复杂的数据处理和分析需求。同时,使用VSTO代码,我们还能够更好地实现与其他系统的集成和数据交互,扩展Excel的应用场景和价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值