当前位置:威尼斯 > 编程 > 4) 打开已存在的工作簿

4) 打开已存在的工作簿

文章作者:编程 上传时间:2019-09-28

Excel.Application myExcel = new Excel.Application();
Excel.Workbook workbookData = myExcel.Application.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet xlSheet = (Worksheet)workbookData.Worksheets[1];//取得sheet1

导出时:引用 using Excel = Microsoft.Office.Interop.Excel;

导出时:引用 using Excel = Microsoft.Office.Interop.Excel;

1) 显示当前窗口: xlSheet.Visible = True;
2) 更改 Excel 标题栏: xlSheet.Caption = '应用程序调用 Microsoft Excel';
3) 添加新工作簿: xlSheet.WorkBooks.Add;
4) 打开已存在的工作簿: xlSheet.WorkBooks.Open( 'd:/Demo.xls' );
5) 设置第2个工作表为活动工作表: xlSheet.WorkSheets[2].Activate;
或 xlSheet.WorksSheets[ 'Sheet2' ].Activate;
6) 给单元格赋值:xlSheet.Cells[1,4].Value = '';
xlSheet.Cells.Interior.Color = 50000 ;//设置单元格背景颜色
7) 设置指定列的宽度,以第一列为例: xlSheet.Columns[1].ColumnsWidth = 5;
8) 设置指定行的高度(1磅=0.035厘米),以第二行为例: xlSheet.Rows[2].RowHeight = 1/0.035; // 1厘米
9) 在第8行之前插入分页符: xlSheet.WorkSheets[1].Rows[8].PageBreak = 1;
10) 在第8列之前删除分页符: xlSheet.Columns[4].PageBreak = 0;
11) 指定边框线宽度: xlSheet.Range[ 'B3:D4' ].Borders[2].Weight = 3; 1-左 2-右 3-顶 4-底 5-斜 6-斜
12) 清除第一行第四列单元格公式: xlSheet.Cells[1,4].ClearContents;
13) 设置第一行字体属性:
xlSheet.Rows[1].Font.Name = '隶书';
xlSheet.Rows[1].Font.Color = clBlue;
xlSheet.Rows[1].Font.Bold = True;
xlSheet.Rows[1].Font.UnderLine = True;
xlSheet.Range.Merge(); //合并单元格
14) 进行页面设置:
xlSheet.PageSetup.FirstPageNumber=1;/ /从首页开始打印
xlSheet.PageSetup.Orientation=2;//设置为横向打印
xlSheet.PageSetup.PrintTitleRows = "$2:$2";//固定打印表头
a.页眉: 注:这里要注意,如果是Wps ET,Margin的单位默认为像素,要注意一下所给的值,别超出合理范围;而Excel单位默认为字符数; xlSheet.PageSetup.CenterHeader = '报表演示';
b.页脚: xlSheet.PageSetup.CenterFooter = '第&P页---------共页';
c.页眉到顶端边距2cm: xlSheet.PageSetup.HeaderMargin = 2/0.035;
d.页脚到底端边距3cm: xlSheet.PageSetup.HeaderMargin = 3/0.035;
e.顶边距2cm: xlSheet.PageSetup.TopMargin = 2/0.035;
f.底边距2cm: xlSheet.PageSetup.BottomMargin = 2/0.035;
g.左边距2cm: xlSheet.PageSetup.LeftMargin = 2/0.035;
h.右边距2cm: xlSheet.PageSetup.RightMargin = 2/0.035;
i.页面水平居中: xlSheet.PageSetup.CenterHorizontally = 2/0.035;
j.页面垂直居中: xlSheet.PageSetup.CenterVertically = 2/0.035;
k.打印单元格网线: xlSheet.PageSetup.PrintGridLines = True;
15) 拷贝操作:
a.拷贝整个工作表: xlSheet.Used.Range.Copy;
b.拷贝指定区域: xlSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴: xlSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴: xlSheet.Range.PasteSpecial;
16) 插入一行或一列:
a. xlSheet.Rows[2].Insert;
b. xlSheet.Columns[1].Insert;
17) 删除一行或一列:
a. xlSheet.Rows[2].Delete;
b. xlSheet.Columns[1].Delete;
18) 打印预览工作表: xlSheet.PrintPreview;
19) 打印输出工作表: xlSheet.PrintOut;
20) 工作表另存为: workbookData.Saved = true;
xlSheet.SaveAs(filename, missing, missing, missing, missing, missing, missing, missing, missing, missing);
21) 关闭工作簿: workbookData.Close(false, missing, missing);
22) 退出 Excel: myExcel.Quit();

威尼斯 1

威尼斯 2

在C#中如何对Excel单元格设置背景色以及对Range设边框

private Excel.Application objApp;
private Excel.Sheets objSheets;
private Excel._Worksheet objSheet;
private Excel.Range range;
objApp = new Excel.Application();
objSheet = (Excel._Worksheet)objSheets.get_Item;

/// <summary>
/// 设置单元格的背景色---多个连接的单元格
/// </summary>
/// <param name="sRow">开始行</param>
/// <param name="sCol">开始列</param>
/// <param name="eRow">结束行</param>
/// <param name="eCol">结束列</param>
/// <param name="colorIndex">颜色的索引</param>
public void SetRangeBackground(int sRow,int sCol,int eRow,int eCol,int colorIndex)
{
range=objSheet.get_Range(objSheet.Cells[sRow,sCol],objSheet.Cells[eRow,eCol]);
range.Interior.ColorIndex=colorIndex;
}
/// <summary>
/// 设置单元格的线
/// </summary>
public void SetBorderLine(int sRow,int sCol,int eRow,int eCol)
{
range=objSheet.get_Range(objSheet.Cells[sRow,sCol],objSheet.Cells[eRow,eCol]);
range.Cells.Borders.LineStyle=1;

}

设置边框颜色:sheet.Cells[startRow, 2].Borders.Color = 0x0000ff;//这个是红色,x后前两个0是蓝色,中间两个0是绿色,最后两个是红色~~

设置制定边框:sheet.Range[sheet.Cells[1, 2], sheet.Cells[1 ,30]].Borders[4].LineStyle = 1;

Border[4]是指下边框,3是指上边框,1是左,2是右填成0会报错.不加中括号是全部的边框~

威尼斯 3

Excel里设置颜色的时候:ColorIndex,不能用Color.在网上找到的这个图,不用自己去一个个试了

来个改背景色的例子:sheet.Cells[startRow, 25].Interior.ColorIndex = 4;

合并单元格:r=ws.get_Range(ws.Cells[1,1],ws.Cells[1,6]); //取得合并的区域
r.MergeCells=true;

 

 

C#调用Excel时删除Sheet的小问题

用C#调Excel对象的Worksheets.Delete进行删除某个文件中的Sheet时始终无法实现。后来发现问题所在:

默认情况下,Appliation.Open文件时visible为false,在无宏的情况下只会在后台进行操作,不在前台打开页面。这种情况下,如果只调用Delete来删除,会弹出确认删除的对话框,但是由于是后台操作无法看见这个对话框,所以始终删除没有完成。将visible时才发现问题所在。

解决方法,不弹出这个提示框,workbook.displayalerts = false ,即可。(注:此处的workbook是Application)

 

 

 

 

 

 

 

 

#region 读取excel
//打开方法
public DataTable ExceltoDataSet(string path)
{
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path

#region 读取excel
//打开方法
public DataTable ExceltoDataSet(string path)
{
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path

  • ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";
    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open();
    System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
    string tableName = schemaTable.Rows[0][2].ToString().Trim();
  • ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";
    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open();
    System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
    string tableName = schemaTable.Rows[0][2].ToString().Trim();

string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = "Select * From [" + tableName + "]";
myCommand = new OleDbDataAdapter(strExcel, strConn);

string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = "Select * From [" + tableName + "]";
myCommand = new OleDbDataAdapter(strExcel, strConn);

ds = new DataSet();

ds = new DataSet();

myCommand.Fill(ds, tableName);
System.Data.DataTable dt = ds.Tables[0];

myCommand.Fill(ds, tableName);
System.Data.DataTable dt = ds.Tables[0];

return dt;

return dt;

}

}

#endregion

#endregion

#region 导出excel
/// <summary>
/// 将数据表保存到Excel表格中
/// </summary>
/// <param name="addr">Excel表格存放地址(程序运行目录后面的部分)</param>
/// <param name="dt">要输出的DataTable</param>
public void SaveToExcel(string addr, System.Data.DataTable dt, string sheetName)
{
//0.注意:
// * Excel中形如Cells[x][y]的写法,前面的数字是列,后面的数字是行!
// * Excel中的行、列都是从1开始的,而不是0
//1.制作一个新的Excel文档实例
Excel::Application xlsApp = new Excel::Application();
xlsApp.Workbooks.Add(true);
/* 示例输入:需要注意Excel里数组以1为起始(而不是0)
* for (int i = 1; i < 10; i++)
* {
* for (int j = 1; j < 10; j++)
* {
* xlsApp.Cells[i][j] = "-";
* }
* }
*/
//2.设置Excel分页卡标题
xlsApp.ActiveSheet.Name = sheetName;
//3.合并第一行的单元格
string temp = "";
if (dt.Columns.Count < 26)
{
temp = ((char)('A' + dt.Columns.Count)).ToString();
}
else if (dt.Columns.Count <= 26 + 26 * 26)
{
temp = ((char)('A' + (dt.Columns.Count - 26) / 26)).ToString()

#region 导出excel
/// <summary>
/// 将数据表保存到Excel表格中
/// </summary>
/// <param name="addr">Excel表格存放地址(程序运行目录后面的部分)</param>
/// <param name="dt">要输出的DataTable</param>
public void SaveToExcel(string addr, System.Data.DataTable dt, string sheetName)
{
//0.注意:
// * Excel中形如Cells[x][y]的写法,前面的数字是列,后面的数字是行!
// * Excel中的行、列都是从1开始的,而不是0
//1.制作一个新的Excel文档实例
Excel::Application xlsApp = new Excel::Application();
xlsApp.Workbooks.Add(true);
/* 示例输入:需要注意Excel里数组以1为起始(而不是0)
* for (int i = 1; i < 10; i++)
* {
* for (int j = 1; j < 10; j++)
* {
* xlsApp.Cells[i][j] = "-";
* }
* }
*/
//2.设置Excel分页卡标题
xlsApp.ActiveSheet.Name = sheetName;
//3.合并第一行的单元格
string temp = "";
if (dt.Columns.Count < 26)
{
temp = ((char)('A' + dt.Columns.Count)).ToString();
}
else if (dt.Columns.Count <= 26 + 26 * 26)
{
temp = ((char)('A' + (dt.Columns.Count - 26) / 26)).ToString()

  • ((char)('A' + (dt.Columns.Count - 26) % 26)).ToString();
    }
    else throw new Exception("列数过多");
    Excel::Range range = xlsApp.get_Range("A1", temp + "1");
    //range.ClearContents(); //清空要合并的区域
    //range.MergeCells = true; //合并单元格
    ////4.填写第一行:表名,对应DataTable的TableName
    //xlsApp.Cells[1][1] = dt.TableName;
    //xlsApp.Cells[1][1].Font.Name = "黑体";
    //xlsApp.Cells[1][1]威尼斯,.Font.Size = 25;
    //xlsApp.Cells[1][1].Font.Bold = true;
    //xlsApp.Cells[1][1].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
    //xlsApp.Rows[1].RowHeight = 60; //第一行行高为60(单位:磅)
    ////5.合并第二行单元格,用于书写表格生成日期
    //range = xlsApp.get_Range("A2", temp + "2");
    //range.ClearContents(); //清空要合并的区域
    //range.MergeCells = true; //合并单元格
    ////6.填写第二行:生成时间
    //xlsApp.Cells[1][2] = "报表生成于:" + DateTime.Now.ToString();
    //xlsApp.Cells[1][2].Font.Name = "宋体";
    //xlsApp.Cells[1][2].Font.Size = 15;
    ////xlsApp.Cells[1][2].HorizontalAlignment = 4;//右对齐
    //xlsApp.Cells[1][2].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
    //xlsApp.Rows[2].RowHeight = 30; //第一行行高为60(单位:磅)
    //7.填写各列的标题行
    xlsApp.Cells[1][1] = "ID";
    for (int i = 0; i < dt.Columns.Count; i++)
    {
    xlsApp.Cells[i + 2][1] = dt.Columns[i].ColumnName;
    }
    xlsApp.Rows[1].Font.Name = "宋体";
    xlsApp.Rows[1].Font.Size = 15;
    xlsApp.Rows[1].Font.Bold = true;
    //xlsApp.Rows[1].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
    ////设置颜色
    //range = xlsApp.get_Range("A3", temp + "3");
    //range.Interior.ColorIndex = 33;
    //8.填写DataTable中的数据
    for (int i = 0; i < dt.Rows.Count; i++)
    {
    xlsApp.Cells[1][i + 2] = (i + 1).ToString();
    for (int j = 0; j < dt.Columns.Count; j++)
    {
    xlsApp.Cells[j + 2][i + 2] = dt.Rows[i][j];
    }
    }
    range = xlsApp.get_Range("A4", temp + (dt.Rows.Count + 1).ToString());
    //range.Interior.ColorIndex = 37;
    //range.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
    ////9.描绘边框
    //range = xlsApp.get_Range("A1", temp + (dt.Rows.Count + 1).ToString());
    //range.Borders.LineStyle = 1;
    //range.Borders.Weight = 3;
    //10.打开制作完毕的表格
    //xlsApp.Visible = true;
    //11.保存表格到根目录下指定名称的文件中
    xlsApp.ActiveWorkbook.SaveAs(addr);
    xlsApp.Quit();
    xlsApp = null;
    GC.Collect();
    }
    #endregion
  • ((char)('A' + (dt.Columns.Count - 26) % 26)).ToString();
    }
    else throw new Exception("列数过多");
    Excel::Range range = xlsApp.get_Range("A1", temp + "1");
    //range.ClearContents(); //清空要合并的区域
    //range.MergeCells = true; //合并单元格
    ////4.填写第一行:表名,对应DataTable的TableName
    //xlsApp.Cells[1][1] = dt.TableName;
    //xlsApp.Cells[1][1].Font.Name = "黑体";
    //xlsApp.Cells[1][1].Font.Size = 25;
    //xlsApp.Cells[1][1].Font.Bold = true;
    //xlsApp.Cells[1][1].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
    //xlsApp.Rows[1].RowHeight = 60; //第一行行高为60(单位:磅)
    ////5.合并第二行单元格,用于书写表格生成日期
    //range = xlsApp.get_Range("A2", temp + "2");
    //range.ClearContents(); //清空要合并的区域
    //range.MergeCells = true; //合并单元格
    ////6.填写第二行:生成时间
    //xlsApp.Cells[1][2] = "报表生成于:" + DateTime.Now.ToString();
    //xlsApp.Cells[1][2].Font.Name = "宋体";
    //xlsApp.Cells[1][2].Font.Size = 15;
    ////xlsApp.Cells[1][2].HorizontalAlignment = 4;//右对齐
    //xlsApp.Cells[1][2].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
    //xlsApp.Rows[2].RowHeight = 30; //第一行行高为60(单位:磅)
    //7.填写各列的标题行
    xlsApp.Cells[1][1] = "ID";
    for (int i = 0; i < dt.Columns.Count; i++)
    {
    xlsApp.Cells[i + 2][1] = dt.Columns[i].ColumnName;
    }
    xlsApp.Rows[1].Font.Name = "宋体";
    xlsApp.Rows[1].Font.Size = 15;
    xlsApp.Rows[1].Font.Bold = true;
    //xlsApp.Rows[1].HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中
    ////设置颜色
    //range = xlsApp.get_Range("A3", temp + "3");
    //range.Interior.ColorIndex = 33;
    //8.填写DataTable中的数据
    for (int i = 0; i < dt.Rows.Count; i++)
    {
    xlsApp.Cells[1][i + 2] = (i + 1).ToString();
    for (int j = 0; j < dt.Columns.Count; j++)
    {
    xlsApp.Cells[j + 2][i + 2] = dt.Rows[i][j];
    }
    }
    range = xlsApp.get_Range("A4", temp + (dt.Rows.Count + 1).ToString());
    //range.Interior.ColorIndex = 37;
    //range.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
    ////9.描绘边框
    //range = xlsApp.get_Range("A1", temp + (dt.Rows.Count + 1).ToString());
    //range.Borders.LineStyle = 1;
    //range.Borders.Weight = 3;
    //10.打开制作完毕的表格
    //xlsApp.Visible = true;
    //11.保存表格到根目录下指定名称的文件中
    xlsApp.ActiveWorkbook.SaveAs(addr);
    xlsApp.Quit();
    xlsApp = null;
    GC.Collect();
    }
    #endregion

本文由威尼斯发布于编程,转载请注明出处:4) 打开已存在的工作簿

关键词: