(1)如何引用单元格和区域:
指定单元格或单元格区域,然后对该单元格或单元格区域进行一些操作,如输入公式或更改格式。通常用一条语句就能完成操作,该语句可标识单元格,还可更改某个属性或应用某个方法。Range 对象既可表示单个单元格,也可表示单元格区域。下列主题说明了标识和处理 Range 对象最常用的方法
示例1将单元格区域 A1:D5 的字体设置为加粗。
Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold =True
演示了使用 Range 属性的一些 A1 样式引用。
引用 含义
Range("A1") 单元格 A1
Range("A1:B5") 从单元格 A1 到单元格 B5 的区域
Range("C5:D9,G9:H16") 多块选定区域
Range("A:A") A 列
Range("1:1") 第一行
Range("A:C") 从 A 列到 C 列的区域
Range("1:5") 从第一行到第五行的区域
Range("1:1,3:3,8:8") 第 1、3 和 8 行
Range("A:A,C:C,F:F") A 、C 和 F 列
示例2 用编号引用单元格
通过使用行列编号,可用 Cells 属性来引用单个单元格。该属性返回代表单个单元格的 Range 对象。下例中,Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。
Worksheets("Sheet1").Cells(6, 1).Value = 10
示例3 引用行和列
可用 Rows 属性或 Columns 属性来处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。下例中,用 Rows(1) 返回 Sheet1 上的第一行,然后将单元格区域的 Font 对象的 Bold 属性设置为 True。
Worksheets("Sheet1").Rows(1).Font.Bold = True
演示使用 Rows 和 Columns 属性的一些行和列的引用。
引用 含义
Rows(1) 第一行
Rows 工作表上所有的行
Columns(1) 第一列
Columns("A") 第一列
Columns 工作表上所有的列
示例4 相对于其他单元格来引用单元格
处理相对于另一个单元格的某一单元格的常用方法是使用 Offset 属性。下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线格式。
ActiveCell.Offset(1, 3).Font.Underline = xlDouble
(2)页面控制
Dim ExcelID as Excel.Application
Set ExcelID as new Excel.Application
1) 显示当前窗口:
ExcelID.Visible := True;
2) 更改 Excel 标题栏:
ExcelID.Caption := '应用程序调用 Microsoft Excel';
3) 添加新工作簿:
ExcelID.WorkBooks.Add;
4) 打开已存在的工作簿:
ExcelID.WorkBooks.Open( 'C:\Excel\Demo.xls' );
5) 设置第2个工作表为活动工作表:
ExcelID.WorkSheets[2].Activate;
或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;
6) 给单元格赋值:
ExcelID.Cells[1,4].Value := '第一行第四列';
7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
9) 在第8行之前插入分页符:
ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
10) 在第8列之前删除分页符:
ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
11) 指定边框线宽度
ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight :=3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )
12) 清除第一行第四列单元格公式:
ExcelID.ActiveSheet.Cells[1,4].ClearContents;
13) 设置第一行字体属性:
ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
14) 进行页面设置:
a.页眉:
ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
15) 拷贝操作:
a.拷贝整个工作表:
ExcelID.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelID.ActiveSheet.Range.PasteSpecial;
16) 插入一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Insert;
b. ExcelID.ActiveSheet.Columns[1].Insert;
17) 删除一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Delete;
b. ExcelID.ActiveSheet.Columns[1].Delete;
18) 打印预览工作表:
ExcelID.ActiveSheet.PrintPreview;
19) 打印输出工作表:
ExcelID.ActiveSheet.PrintOut;
20) 工作表保存:
If not ExcelID.ActiveWorkBook.Saved then
ExcelID.ActiveSheet.PrintPreview
End if
21) 工作表另存为:
ExcelID.SaveAs( 'C:\Excel\Demo1.xls' );
22) 放弃存盘:
ExcelID.ActiveWorkBook.Saved := True;
23) 关闭工作簿:
ExcelID.WorkBooks.Close;
24) 退出 Excel:
ExcelID.Quit;
25) 设置工作表密码:
ExcelID.ActiveSheet.Protect "123",
DrawingObjects:=True,
Contents:=True, Scenarios:=True
26) EXCEL的显示方式为最大化
ExcelID.Application.WindowState = xlMaximized
27) 工作薄显示方式为最大化
ExcelID.ActiveWindow.WindowState = xlMaximized
28) 设置打开默认工作薄数量
ExcelID.SheetsInNewWorkbook = 3
29) '关闭时是否提示保存(true 保存;false 不保存)
ExcelID.DisplayAlerts = False
30) 设置拆分窗口,及固定行位置
ExcelID.ActiveWindow.SplitRow = 1
ExcelID.ActiveWindow.FreezePanes = True
31)打印
sheets.PageSetup.PrintTitleRows = "$1:$3";//顶端标题行
sheets.PageSetup.PaperSize=Excel.XlPaperSize.xlPaperA3;//.xlPaperB4;//纸张大小
sheets.PageSetup.Orientation=Excel.XlPageOrientation.xlLandscape;//纸张方向.横向
32) 行的样式:边线宽度,颜色
33)
//横向合并注意 方向为从右到左
for (i = iTitleRow + 1; i <= iTitleRow + iHeadRow; i++)
{
j = iColNum;
while (j > 1)
{
PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);
PrevValue = PrevRange.Value2.ToString();
NextRange = PrevRange.get_Offset(0, -1);
NextValue = NextRange.Value2.ToString();
if (PrevValue == NextValue)
{
NextRange.Value2 = "";
xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;
}
j -= 1;
}
}
//纵向合并 注意方向为从下到上,并且判断是否是已经合并过的单元格
for (j = 1; j <=iColNum; j++)
{
i = iTitleRow + iHeadRow;
while (i >iTitleRow+1)
{
PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);
if ((bool)PrevRange.MergeCells)
{ PrevRange = (Excel.Range)PrevRange.MergeArea.get_Item(1, 1); }
PrevValue = PrevRange.Value2.ToString();
NextRange = PrevRange.get_Offset(-1, 0);
if ((bool)NextRange.MergeCells)
{ NextRange = (Excel.Range)NextRange.MergeArea.get_Item(1, 1); }
NextValue = NextRange.Value2.ToString();
if (PrevValue == NextValue)
{
NextRange.Value2 = "";
xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;
}
i -= 1;
}
指定单元格或单元格区域,然后对该单元格或单元格区域进行一些操作,如输入公式或更改格式。通常用一条语句就能完成操作,该语句可标识单元格,还可更改某个属性或应用某个方法。Range 对象既可表示单个单元格,也可表示单元格区域。下列主题说明了标识和处理 Range 对象最常用的方法
示例1将单元格区域 A1:D5 的字体设置为加粗。
Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold =True
演示了使用 Range 属性的一些 A1 样式引用。
引用 含义
Range("A1") 单元格 A1
Range("A1:B5") 从单元格 A1 到单元格 B5 的区域
Range("C5:D9,G9:H16") 多块选定区域
Range("A:A") A 列
Range("1:1") 第一行
Range("A:C") 从 A 列到 C 列的区域
Range("1:5") 从第一行到第五行的区域
Range("1:1,3:3,8:8") 第 1、3 和 8 行
Range("A:A,C:C,F:F") A 、C 和 F 列
示例2 用编号引用单元格
通过使用行列编号,可用 Cells 属性来引用单个单元格。该属性返回代表单个单元格的 Range 对象。下例中,Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。
Worksheets("Sheet1").Cells(6, 1).Value = 10
示例3 引用行和列
可用 Rows 属性或 Columns 属性来处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。下例中,用 Rows(1) 返回 Sheet1 上的第一行,然后将单元格区域的 Font 对象的 Bold 属性设置为 True。
Worksheets("Sheet1").Rows(1).Font.Bold = True
演示使用 Rows 和 Columns 属性的一些行和列的引用。
引用 含义
Rows(1) 第一行
Rows 工作表上所有的行
Columns(1) 第一列
Columns("A") 第一列
Columns 工作表上所有的列
示例4 相对于其他单元格来引用单元格
处理相对于另一个单元格的某一单元格的常用方法是使用 Offset 属性。下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线格式。
ActiveCell.Offset(1, 3).Font.Underline = xlDouble
(2)页面控制
Dim ExcelID as Excel.Application
Set ExcelID as new Excel.Application
1) 显示当前窗口:
ExcelID.Visible := True;
2) 更改 Excel 标题栏:
ExcelID.Caption := '应用程序调用 Microsoft Excel';
3) 添加新工作簿:
ExcelID.WorkBooks.Add;
4) 打开已存在的工作簿:
ExcelID.WorkBooks.Open( 'C:\Excel\Demo.xls' );
5) 设置第2个工作表为活动工作表:
ExcelID.WorkSheets[2].Activate;
或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;
6) 给单元格赋值:
ExcelID.Cells[1,4].Value := '第一行第四列';
7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
9) 在第8行之前插入分页符:
ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
10) 在第8列之前删除分页符:
ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
11) 指定边框线宽度
ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight :=3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )
12) 清除第一行第四列单元格公式:
ExcelID.ActiveSheet.Cells[1,4].ClearContents;
13) 设置第一行字体属性:
ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
14) 进行页面设置:
a.页眉:
ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
15) 拷贝操作:
a.拷贝整个工作表:
ExcelID.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelID.ActiveSheet.Range.PasteSpecial;
16) 插入一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Insert;
b. ExcelID.ActiveSheet.Columns[1].Insert;
17) 删除一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Delete;
b. ExcelID.ActiveSheet.Columns[1].Delete;
18) 打印预览工作表:
ExcelID.ActiveSheet.PrintPreview;
19) 打印输出工作表:
ExcelID.ActiveSheet.PrintOut;
20) 工作表保存:
If not ExcelID.ActiveWorkBook.Saved then
ExcelID.ActiveSheet.PrintPreview
End if
21) 工作表另存为:
ExcelID.SaveAs( 'C:\Excel\Demo1.xls' );
22) 放弃存盘:
ExcelID.ActiveWorkBook.Saved := True;
23) 关闭工作簿:
ExcelID.WorkBooks.Close;
24) 退出 Excel:
ExcelID.Quit;
25) 设置工作表密码:
ExcelID.ActiveSheet.Protect "123",
DrawingObjects:=True,
Contents:=True, Scenarios:=True
26) EXCEL的显示方式为最大化
ExcelID.Application.WindowState = xlMaximized
27) 工作薄显示方式为最大化
ExcelID.ActiveWindow.WindowState = xlMaximized
28) 设置打开默认工作薄数量
ExcelID.SheetsInNewWorkbook = 3
29) '关闭时是否提示保存(true 保存;false 不保存)
ExcelID.DisplayAlerts = False
30) 设置拆分窗口,及固定行位置
ExcelID.ActiveWindow.SplitRow = 1
ExcelID.ActiveWindow.FreezePanes = True
31)打印
sheets.PageSetup.PrintTitleRows = "$1:$3";//顶端标题行
sheets.PageSetup.PaperSize=Excel.XlPaperSize.xlPaperA3;//.xlPaperB4;//纸张大小
sheets.PageSetup.Orientation=Excel.XlPageOrientation.xlLandscape;//纸张方向.横向
32) 行的样式:边线宽度,颜色
destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle= Excel.XlLineStyle.xlContinuous;
destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].Weight= (Excel.XlBorderWeight)Enum.Parse(typeof(Excel.XlBorderWeight),
LineWidthCode(BaseRpt.mintOutLineWeight,true));
destRange.Borders[Excel.XlBordersIndex.xlEdgeTop].Color= BaseRpt.mlngOutLineColor;
33)
//横向合并注意 方向为从右到左
for (i = iTitleRow + 1; i <= iTitleRow + iHeadRow; i++)
{
j = iColNum;
while (j > 1)
{
PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);
PrevValue = PrevRange.Value2.ToString();
NextRange = PrevRange.get_Offset(0, -1);
NextValue = NextRange.Value2.ToString();
if (PrevValue == NextValue)
{
NextRange.Value2 = "";
xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;
}
j -= 1;
}
}
//纵向合并 注意方向为从下到上,并且判断是否是已经合并过的单元格
for (j = 1; j <=iColNum; j++)
{
i = iTitleRow + iHeadRow;
while (i >iTitleRow+1)
{
PrevRange = xlSheet.get_Range(xlSheet.Cells[i, j], xlSheet.Cells[i, j]);
if ((bool)PrevRange.MergeCells)
{ PrevRange = (Excel.Range)PrevRange.MergeArea.get_Item(1, 1); }
PrevValue = PrevRange.Value2.ToString();
NextRange = PrevRange.get_Offset(-1, 0);
if ((bool)NextRange.MergeCells)
{ NextRange = (Excel.Range)NextRange.MergeArea.get_Item(1, 1); }
NextValue = NextRange.Value2.ToString();
if (PrevValue == NextValue)
{
NextRange.Value2 = "";
xlSheet.get_Range(NextRange, PrevRange).MergeCells = true;
}
i -= 1;
}
}
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
object m_objOpt = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Workbooks ExcelBooks = (Microsoft.Office.Interop.Excel.Workbooks)ExcelApp.Workbooks;
Microsoft.Office.Interop.Excel._Workbook ExcelBook = (Microsoft.Office.Interop.Excel._Workbook)(ExcelBooks.Add(m_objOpt));
Microsoft.Office.Interop.Excel._Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel._Worksheet)ExcelBook.ActiveSheet;
//设置标题
ExcelApp.Caption = "XX";
//设置列宽
//ExcelApp.Columns.EntireColumn.AutoFit();
ExcelApp.get_Range("A1", System.Reflection.Missing.Value).ColumnWidth = 25;
//设置列居中对齐
//Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold =True
ExcelApp.get_Range("A:A", System.Reflection.Missing.Value).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
//写入列名
for (int i = 1; i <= listV_fault.Columns.Count; i++)
{
ExcelSheet.Cells[1, i] = listV_fault.Columns[i - 1].Text;
}
//写入内容
for (int i = 2; i < listV_fault.Items.Count + 2; i++)
{
ExcelSheet.Cells[i, 1] = listV_fault.Items[i - 2].Text;
for (int j = 2; j <= listV_fault.Columns.Count; j++)
{
ExcelSheet.Cells[i, j] = listV_fault.Items[i - 2].SubItems[j - 1].Text;
}
}
//获取当前时间并修改格式
DateTime dtNowTime = DateTime.Now;
string stNowTime = dtNowTime.ToString();
stNowTime = stNowTime.Replace("/", "-");
stNowTime = stNowTime.Replace(":", "_");
//设置保存路径和名称
string strPath = System.IO.Directory.GetCurrentDirectory() + string.Format(@"\XXX_{0}.xlsx", stNowTime);
//保存并退出
ExcelBook.SaveAs(strPath, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
ExcelApp.Quit();
//回收垃圾
GC.Collect();