打算做一个C#操作EXCEL做报表的程序
需详细的C#操作EXCEL帮助:
1、C#新建EXCEL文档,新建SHEET,删除SHEET,在两个SHEET中间手稿SHEET,移动SHEET位置,保存SHEET,等。
2、C#设置单元格或区域的边框,大小,颜色,字体,合并单元格等。
先想到这些,谢谢。

解决方案 »

  1.   

    http://dotnet.aspx.cc/article/04031aad-0f45-4169-8d14-105d05690e0a/read.aspx其实 引用 Microsoft Office 11.0 Object Library 你要的东西基本都会有的 具体可以参考文档
      

  2.   

    Office2000的,供参考:
    // csc /r:Interop.Excel.dllnamespace Skyiv
    {
      using Excel;  public class Excel2000 : ApplicationClass
      {
        object TM = System.Type.Missing;    public Excel2000()
        {
          DisplayAlerts = false;
        }    // 返回当前工作表的使用的行数
        public int GetRowsCount()
        {
          return ((Worksheet)ActiveSheet).UsedRange.Rows.Count;
        }    // 返回工作表 sheet 的使用的行数
        public int GetRowsCount(int sheet)
        {
          return ((Worksheet)ActiveWorkbook.Sheets[sheet]).UsedRange.Rows.Count;
        }    // 用模板创建工作簿
        public void CreateFromTemplet(string templet, params string [] names)
        {
          foreach (string name in names)
          {
            (Workbooks.Add(templet)).SaveAs(name, TM, TM, TM, TM, TM, XlSaveAsAccessMode.xlNoChange, TM, TM, TM, TM);
          }
        }    // 打开工作簿
        public void Open(params string [] names)
        {
          foreach (string name in names)
          {
            Workbooks.Open(name, TM, TM, TM, TM, TM, TM, TM, TM, TM, TM, TM, TM);
          }
        }    // 复制当前工作簿的 sheet0 到 sheet1 之前
        public void CopySheetBefore(int sheet0, int sheet1)
        {
          ((Worksheet)ActiveWorkbook.Sheets[sheet0]).Copy(ActiveWorkbook.Sheets[sheet1], TM);
        }    // 复制当前工作簿的 sheet0 到 sheet1 之后
        public void CopySheetAfter(int sheet0, int sheet1)
        {
          ((Worksheet)ActiveWorkbook.Sheets[sheet0]).Copy(TM, ActiveWorkbook.Sheets[sheet1]);
        }    // 复制工作簿 book 的 sheet0 到 sheet1 之后
        public void CopySheetAfter(int book, int sheet0, int sheet1)
        {
          ((Worksheet)Workbooks[book].Sheets[sheet0]).Copy(TM, Workbooks[book].Sheets[sheet1]);
        }    // 把删除当前工作簿的工作表 sheet
        public void DeleteSheet(int sheet)
        {
          ((Worksheet)ActiveWorkbook.Sheets[sheet]).Delete();
        }    // 返回工作表 sheet 的名称
        public string GetSheetName(int sheet)
        {
          return ((Worksheet)ActiveWorkbook.Sheets[sheet]).Name;
        }    // 把当前工作表改名为 name
        public void SetSheetName(string name)
        {
          ((Worksheet)ActiveSheet).Name = name;
        }    // 把工作表 sheet 改名为 name
        public void SetSheetName(int sheet, string name)
        {
          ((Worksheet)ActiveWorkbook.Sheets[sheet]).Name = name;
        }    // 把工作簿 book 的工作表 sheet 改名为 name
        public void SetSheetName(int book, int sheet, string name)
        {
          ((Worksheet)Workbooks[book].Sheets[sheet]).Name = name;
        }    // 返回当前工作表的单元格的值
        public object GetCellValue(object col, object row)
        {
          return ((Range)((Worksheet)ActiveSheet).Cells[row, col]).Value;
        }    // 返回工作表sheet的单元格的值
        public object GetCellValue(int sheet, object col, object row)
        {
          return ((Range)((Worksheet)ActiveWorkbook.Sheets[sheet]).Cells[row, col]).Value;
        }    // 对当前工作表的单元格赋值
        public void SetCellText(object col, object row, object txt)
        {
          Cells[row, col] = txt;
        }    // 对book工作簿的sheet工作表的单元格赋值
        public void SetCellText(object book, object sheet, object col, object row, object txt)
        {
          ((Worksheet)Workbooks[book].Sheets[sheet]).Cells[row, col] = txt;
        }    // 对book工作簿的sheet工作表, 在第row行插入一行(复制本行)
        public void InsertCopyRowAt(object book, object sheet, object row)
        {
          ((Range)((Worksheet)Workbooks[book].Sheets[sheet]).Rows[row, TM]).Copy(TM);
          ((Range)((Worksheet)Workbooks[book].Sheets[sheet]).Cells[row, 1]).EntireRow.Insert(0);
        }    // 在第row行插入一行(复制本行)
        public void InsertCopyRowAt(object row)
        {
          ((Range)((Worksheet)ActiveSheet).Rows[row, TM]).Copy(TM);
          ((Range)((Worksheet)ActiveSheet).Cells[row, 1]).EntireRow.Insert(0);
        }    // 在第col行插入一列(复制本列)
        public void InsertCopyColumnAt(object col)
        {
          ((Range)((Worksheet)ActiveSheet).Columns[col, TM]).Copy(TM);
          ((Range)((Worksheet)ActiveSheet).Cells[1, col]).EntireColumn.Insert(0);
        }    // 对book工作簿的sheet工作表, 删除第row行
        public void DeleteRowAt(object book, object sheet, object row)
        {
          ((Range)((Worksheet)Workbooks[book].Sheets[sheet]).Rows[row, TM]).Delete(TM);
        }    // 删除第row行
        public void DeleteRowAt(object row)
        {
          ((Range)((Worksheet)ActiveSheet).Rows[row, TM]).Delete(TM);
        }    // 分类汇总
        public void Subtotal(int r0, int c0, int r1, int c1, int GroupBy, int[] TotalList)
        {
          get_Range(Cells[r0,c0], Cells[r1,c1]).
          Subtotal(GroupBy, XlConsolidationFunction.xlSum, TotalList, TM, TM, XlSummaryRow.xlSummaryBelow);
        }    // 清除
        public void Clear(int r0, int c0, int r1, int c1)
        {
          get_Range(Cells[r0,c0], Cells[r1,c1]).Clear();
        }    // 保存所有工作簿
        public void SaveAll()
        {
          foreach (Workbook book in Workbooks)
          {
            book.Save();
          }
        }
      }
    }
      

  3.   

    建议你用c#做一些辅助的事情,然后用程序把xls文件load起来,
    excel VBA来控制excel会更有效更方便。
    我一只就是这么做的。===============================
    ◆◆◆【易销网】www.ezshopi.com◆◆◆
    TaobaoAnalyzer.淘宝分析家-淘宝市场分析专家
    ===============================
      

  4.   

    非常感谢谢空军的回答,对我的帮助非常大。
    下面是基本报表定义部分设置方案,除此还有系统配置,报表生成等,请各位看看一个人30个工作日开发完成的可行性有多高。多谢
    1 报表模板定义
      报表模板定义,是用户根据实际需求,定义出报表的原型,以及数据添充规则,然后系统可以根据模块分配给的具体报表,以及数据说不清充规则按期生成用户预期的报表。
    1.1 报表组定义
      定义一个报表分组,将作为多张报表的容器。对应于一个EXCEL文档。
    1.2 报表定义
      定义一张报表,相当于EXCEL的一张SHEET。
    1.2.1 报表规格定义
      针对某一整张报表进行定义,描述报表的整体属性。
    1.2.2 报表元素定义
      详细定义报表的各种细节,如表头,小节,注脚等。
    1.2.2.1 表头定义
      定义报表的表头部分,包括标题,说明等等,与数据无关的标识性内容。
      表头的定义通常包括多个ITEM的定义,每个ITEM作为一项相对独立显示的内容,其内容可以是文本,时间,日期,操作员等等相对独立的信息。每个ITEM需定义它的占位,字体,颜色,对齐方式,单元格合并等显示规则。
    1.2.2.2 小节定义
      定义报表小的各个小节,一般而言每个小节都有不同的样式规格,简单报表可能只有一个小节,复杂报表通常会是多个小节组成的。
      小节的定义包括小节样式,排列顺序等定义项目。
      根据目前的需要,抽象出两种小节样式,1,明细列表;2,摘要说明。
    1.2.2.2.1 明细列表
      当小节定义中小节样式为明细列表时,采用此方式定义小节的细节。
      明细列表是报表中常见的一种方式,通常会以列表的形式,为一批同类别的项目形成一张二维表。其中包括样式定义和数据添充规则定义。
      样式定义将涉及到明细列表的表头定义,列定义,分组,汇总,行、列排序,列宽度,单元格合并,预警,显示规则等设置项。
      数据规则定义主要定义明细列表内的实际数据由何种数据源,直接或经过运算而成。亦有可能由多个数据源参与运算,以及数据源截取的数据范围。
    1.2.2.2.2 摘要说明
      当小节样式设置为摘要说明时,采用此方式定义小节的细节。
      摘要说明是一种简单的报表展示方式,但是其数据填充较明细列表复杂。可能一个数据要通过比较复杂的运算得来。其定义亦包括样式定义和数据填充定义。
      样式定义将涉及到明细宽度,单元格合并,预警,显示规则等设置项。
      数据规则定义主要定义明细列表内的实际数据由何种数据源,直接或经过运算而成。极有可能由多个数据源参与进行复杂运算。
    1.3 报表模板预览
      根据以上定义好的报表样式,生成一个空白的报表,给用户一个直观的报表形象。