有一个Excel表格,内含5个Sheet,我想了解一下如何删除其中的某个sheet,如何复制某个Sheet,如何为某个sheet重命名,甚至如何将别的Excel表格中的某个sheet复制到当前Excel表格来并重命名。这些问题那位前辈可以给个代码指教一下,谢谢!

解决方案 »

  1.   

    补充一下,如何复制某个Sheet,指的是将其中的某个sheet的内容复制生成新的sheet。
      

  2.   

    使用第三方的EXCEL的类库来做吧.
      

  3.   

    在EXCEL中录入宏 并把vb代码翻译成C#/VB.NET
      

  4.   

    最好用宏操作
    参考
    http://www.cnblogs.com/pojianhuadie/archive/2006/05/28/409179.html
    http://www.cnblogs.com/heekui/archive/2008/03/30/1129355.html
    http://www.cnblogs.com/dahuzizyd/archive/2007/04/11/709283.html
      

  5.   

    查查owc的Object Models,很简单的:如何删除其中的某个sheet?
       Spreadsheet1.Sheets.Delete(1)如何复制某个Sheet,
       Spreadsheet1.Sheets("Sheet1").Copy(Spreadsheet1.Sheets(Spreadsheet1.Sheets.Count))如何为某个sheet重命名,
       Spreadsheet1.ActiveSheet.Name = "Copy of Sheet1"
    甚至如何将别的Excel表格中的某个sheet复制到当前Excel表格来并重命名。
        Spreadsheet1.Sheets("Sheet1").Copy(Spreadsheet2.Sheets(Spreadsheet2.Sheets.Count))
       Spreadsheet2.ActiveSheet.Name = "Copy of Sheet1"有本电子书《Microsoft Office Web Components Object Models》
      

  6.   

    to chagel:
    您提供的方法对我帮助很大。能再告诉我如何操作Excel表格的删指定行、删指定列和在某行后插行吗?这样就很完整了。谢谢!
      

  7.   

    to chagel:
    您提供的方法对我帮助很大。能再告诉我如何操作Excel表格的删指定行、删指定列和在某行后插行吗?这样就很完整了。谢谢!
      

  8.   

    如何操作Excel表格的删指定行、删指定列和在某行后插行?
      

  9.   

    execl导入程序:ExcelProcess.ExcelProcess myExcel = new ExcelProcess.ExcelProcess();
               myExcel.OpenFileName = filenameinto;
               myExcel.ActiveSheetIndex = myExcel.FindSheetIndex("xx");           try
               {
                   if (myExcel.OpenExcelFile())
                   {
                       string city_name = getCountyFromTitle(myExcel.getOneCellValue(3, 2)); //市名称
                       string directory = filenameinto;
                       if (myExcel.SetSheetName(filenameinto, "sheet"))
                       {
                           //如果Excel文件sheet名更改成功,则关闭该文件
                           myExcel.CloseExcelApplication();                       SqlConnection myconn = DataBase.NewConnection();                       SqlCommand myCommand = new SqlCommand("ExcelToDB1", myconn);
                           myCommand.CommandType = CommandType.StoredProcedure;                       //存储过程第一个参数,文件路径
                           SqlParameter filename = new SqlParameter("@filename", SqlDbType.NVarChar, 300);
                           filename.Value = directory;
                           myCommand.Parameters.Add(filename);                       //存储过程第二个参数,城市名称
                           //SqlParameter cityname = new SqlParameter("@cityname", SqlDbType.NVarChar, 255);
                           //cityname.Value = city_name;
                           //myCommand.Parameters.Add(cityname);                       //设置超时时间为3分钟
                           myCommand.CommandTimeout = 180;                       myconn.Open();
                           myCommand.ExecuteNonQuery();
                           myCommand.Dispose();
                           myconn.Close();                       return true;
                       }
                       else
                       {
                           return false;
                       }
                       //ImportToDBSteps(
      

  10.   

    导入的域名空间:
    using Microsoft.Office.Core;
    using Microsoft.Office.Interop.Excel;
    using System.IO;
    using System.Reflection;
    1.如何打开已有excel文档,或者创建一个新的excel文档;
    Application app = new Application();
    Workbooks wbks = app.Workbooks;
    _Workbook _wbk =  wbks.Add(xxx);
    若打开已有excel,把“xxx”替换成该excel的文件路径;
    注: 若新建一个excel文档,“xxx”替换成true即可;不过这里新建的excel文档默认只有一个sheet
    2.取得、删除和添加sheet
    Sheets shs = _wbk.Sheets;
    2.1 取得: _Worksheet _wsh = (_Worksheet)shs.get_Item(i)//i是要取得的sheet的index
    2.2 删除: app.DisplayAlerts = false;//删除sheet必须的设置
    _wsh.Delete();
    2.3 添加: app.Worksheets.Add(a,b,c,d);
    //a(before),b(after):确定添加位置;c:数目;d:类型
    2.4 sheet的重命名
    _wsh.Name = "xxx";
    3.删除行和列
    3.1 删除行:
    ((Range)_wsh.Rows[3, Missing.Value]).Delete(XlDeleteShiftDirection.xlShiftUp); 
    3.2 删除列:
    _wsh.get_Range(_wsh.Cells[1, 2], _wsh.Cells[_wsh.Rows.Count, 2]).Delete(XlDeleteShiftDirection.xlShiftToLeft);
    4.添加行和列
    4.1 添加行:
    ((Range)_wsh.Rows[11, Missing.Value]).Insert(Missing.Value, XlInsertFormatOrigin.xlFormatFromLeftOrAbove);
    4.2 添加列:
    _wsh.get_Range(_wsh.Cells[1, 1], _wsh.Cells[_wsh.Rows.Count, 1]).Insert(Missing.Value, XlInsertShiftDirection.xlShiftToRight);
    5.单元格操作
    5.1 单元格的取得
    _wsh.Cells[row, cell]//获得单元格对象
    5.2 设置公式
    _wsh.Cells[row, cell] = "=Sum(A1/B1)";//在对应的单元格输入公式即可
    5.3 合并单元格
    ((Range)_wsh.Rows[1, Missing.Value]).Merge(Missing.Value);
    5.4 设置行高和列宽
    ((Range)_wsh.Rows[3, Missing.Value]).RowHeight = 5;
    ((Range)_wsh.Rows[3, Missing.Value]).ColumnWidth = 5;
    5.5 设置单元格颜色   颜色共有56中,详情请参照[颜色对照表]
    ((Range)_wsh.Rows[1, Missing.Value]).Interior.ColorIndex = 3;
    5.6 设置字号
    ((Range)_wsh.Cells[1, "B"]).Font.Size = 8;
    5.7 是否设置粗体
    ((Range)_wsh.Rows[1, Missing.Value]).Font.Bold = false;
    5.8 单元格/区域、水平垂直居中
    ((Range)_wsh.Cells[2, 1]).HorizontalAlignment = XlVAlign.xlVAlignCenter;
    5.9 设置区域边框
    ((Range)_wsh.Cells[3, 3]).Borders.LineStyle = 3;
    5.10 设置边框的上、下、左、右线条
    _wsh.get_Range(_wsh.Cells[2, 1], _wsh.Cells[2, 2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//左
    _wsh.get_Range(_wsh.Cells[2, 1], _wsh.Cells[2, 2]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//右
    _wsh.get_Range(_wsh.Cells[2, 1], _wsh.Cells[2, 2]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//上
    _wsh.get_Range(_wsh.Cells[2, 1], _wsh.Cells[2, 2]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//下
    6.指定区域的复制
    _Worksheet _wsh = (_Worksheet)shs.get_Item(1);
    Range range = _wsh.get_Range(_wsh.Cells[7, 1], _wsh.Cells[10, _wsh.Columns.Count]);//复制选中区域的内容
    range.Select(); 
    range.Copy(Type.Missing);
    Range test = ((Range)_wsh.Cells[11, 1]);//选中粘贴的起始位置
    test.Select();
    app.DisplayAlerts = false;//屏蔽掉Alert,默认确定粘贴 
    test.Parse(Missing.Value, Missing.Value);
    注: Type.Missing和Missing.Value,在excel的操作中被视为某些参数的默认值,他们起到的作用很多时候是形式补足参数
    7.excel文件的保存,及后续处理
    7.1 文件保存
    app.DisplayAlerts = false;//屏蔽掉系统跳出的Alert
    app.AlertBeforeOverwriting = false;
    //保存到指定目录
    _wbk.SaveAs(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value);
    注: 这个地方只能采用该方法保存,不然在指定路径下保存文件外,在我的文档中也会生成一个对应的副本
    7.2 后续处理:退出和释放
    //_wbk.Close(null, null, null);
    //wbks.Close();
    app.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);//释放掉多余的excel进程
    app = null;
    说明: 在application关闭的过程中,通常我们有两种方案:
    #直接退出app
    #先关闭workbook,然后关闭workbooks,最后在退出app
    鉴于这两种方式,或许本质上是一样的(这点需要证明),但是依据我们软件开发的原则:哪里需要哪里声明,哪里结束哪里释放回收。
    本人认为,既然在直接退出app的时候,我们不清楚workbook和workbooks具体在什么时间关闭,不如在结束的时候直接手动关闭,这样做可以做到资源的快速直接回收;
    所以,我建议采用先关闭workbook,然后关闭workbooks,最后在退出app。
    8.关于单元格设置域和取得域里需要的数据
    8.1 若单元格已经设置为下拉框
    ((Range)_wsh.Cells[2, 1]).Validation.Modify(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing, "1,2,3", Type.Missing);
    //这里的“1,2,3”设置的就是下拉框的值
    8.2 若单元格还没有设置为下拉框的形式
    ((Range)_wsh.Cells[2, 1]).Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing,"1,2,3", Type.Missing);
    8.3 取得下拉框域的值
    string strValue = ((Range)_wsh.Cells[2, 1]).Validation.Formula1;
    注: 若在excel模板中通过有效性设定了下拉框的值,strValue得到的将会是excel里的公式,需将其转换
    取得strValue后,可以根据其索引得到你需要的数值;
    9.隐藏行和隐藏列
    9.1 隐藏行
    _wsh.get_Range(_wsh.Cells[19, 1], _wsh.Cells[22, 1]).EntireRow.Hidden = true;
    9.2 隐藏列
    _wsh.get_Range(_wsh.Cells[1, 1], _wsh.Cells[_wsh.Rows.Count, 1]).EntireColumn.Hidden = true;
    10.excel下载接口参数
    bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
    类型 功能 获取方式
    # HttpRequest 获取当前页的 HttpRequest 对象 Page.Request
    # HttpResponse 获取当前页的 HttpResponse 对象 Page.Response
    # string 保存的文件名 设置
    # string 下载的文件路径 设置
    # long 下载速度 设置