客户要把各个部门的EXCEL报表,合并成一个EXCEL文件,
请问,怎么该怎么写呢?EXCEL文件不是很有规律的,不可以使用数据库方式来访问,需要逐行逐列遍例下,
谁有代码提供下呢?

解决方案 »

  1.   

    关于合并就没有用过,你可以看一下以下的代码:
    前面的我就不翻译了。老外操作的是Excel 2000。所有Excel的程序操作都来源于Excel的对象库Excel9.olb.本例也只是对这个东东做一个简单的操作了解。有告诫待于朋友们的具体了解:)也算是为我们站点上天天为Excel烦的兄弟们,指一条“明路”吧:)
    首先的一步就是使用Tlbimp这个工具将Excel9.0的对象库文件Excel8.olb转换成为dll,这样才能做为.Net平台Assembly来使用:)操作如下:TlbImp Excel9.olb Excel.dll 只要有了这个Excel.dll,现在我们就能使用Excel的各种操作函数了。 
    下面就让我们具体看看C#是如何使用这些东东吧。 1. 创建一个新Excel的Application: 
    Application exc = new Application();
    if (exc == null) {
    Console.WriteLine("ERROR: EXCEL couldn't be started");
    return 0;
    }
    2. 让这个工程可见: exc.set_Visible(0, true); 3. 获取WorkBooks集合: Workbooks workbooks = exc.Workbooks; 4. 加入新的WorkBook: _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0); 5. 获取WorkSheets集合: 
    _Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
    if (worksheet == null) {
    Console.WriteLine ("ERROR in worksheet == null");
    }6. 给单元格设置变量: 
    Range range1 = worksheet.get_Range("C1", Missing.Value);
    if (range1 == null) {
    Console.WriteLine ("ERROR: range == null");
    }
    const int nCells = 1;
    Object[] args1 = new Object[1];
    args1[0] = nCells;
    range1.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, range1, args1);
    例程: 
    using System;
    using System.Reflection; 
    using System.Runtime.InteropServices; 
    using Excel;class Excel {
    public static int Main() {
    Application exc = new Application();
    if (exc == null) {
    Console.WriteLine("ERROR: EXCEL couldn't be started!");
    return 0;
    }exc.set_Visible(0, true); 
    Workbooks workbooks = exc.Workbooks;
    _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0); 
    Sheets sheets = workbook.Worksheets;_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
    if (worksheet == null) {
    Console.WriteLine ("ERROR: worksheet == null");
    }Range range1 = worksheet.get_Range("C1", Missing.Value);
    if (range1 == null) {
    Console.WriteLine ("ERROR: range == null");
    }
    const int nCells = 1;
    Object[] args1 = new Object[1];
    args1[0] = nCells;
    range1.GetType().InvokeMember("Value", BindingFlags.SetProperty, null,range1, args1);
    return 100;
    }
    }现在我们来看看如何使用数组,他有些类似于设置单元格。仅仅需要的改变只是args2[0] = array2; 
    const int nCell = 5;
    Range range2 = worksheet.get_Range("A1", "E1");
    int[] array2 = new int [nCell];
    for (int i=0; i < array2.GetLength(0); i++) {
    array2[i] = i+1;
    }
    Object[] args2 = new Object[1];
    args2[0] = array2;
    range2.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, range2, args2);  大家需要了解Tlbimp这个工具的使用啊:)这个东东很有用,可以将普通Win32程序移植到.Net下面来:)
      

  2.   

    Re:C#怎样操作一个已经存在excel表格 
    首先把COM组件"EXCEL9.OLB"拷贝到cs文件所在的目录下,然后输入下列命令: 
    tlbimp excel9.olb  (注:应用。ENT与COM之间的交互的将COM组件发布到。NET的方法:使用Tyte Library Importer 实用程序(tlbimp.exe),将COM类型库转换成。NET元数据。使用该实用程序最简单的形式是:tlbimp MyComLib.dll/out:MyComLibA.dll,然后就可以用。NET程序集中的MyComLibA.dll)目录下面就产生了三个DLL文件:"Excel.dll"、"Office.dll"、"VBIDE.dll"。在产生了上面的三个文件后,这种转换就成功完成了。在下面的程序中,就可以利用这转换好的三个类库编写和Excel表格相关的各种操作了。  using System; 
    using System.Reflection; 
    using System.Data; 
    using System.Data.SqlClient; public class CComDotNet 

    public static void Main() 

      try 
      { 
        Excel.Application excel=new Excel.Application( ); 
        string filename="你的文件路径"; 
        excel.Application.Workbooks.Add(filname); 
        excel.Cells[ 1 , 1 ] = "第一行第一列" ;  
        excel.Cells[ 1 , 2 ] = "第一行第二列" ;  
        excel.Cells[ 2 , 1 ] = "第二行第一列" ;  
        excel.Cells[ 2 , 2 ] = "第二行第二列" ;  
        excel.Cells[ 3 , 1 ] = "第三行第一列" ;  
        excel.Cells[ 3 , 2 ] = "第三行第二列" ;  
        Excel.XlSaveAsAccessMode asm=Excel.XlSaveAsAccessMode.xlShared; 
        object Nothing=System.Reflection.Missing.value; 
        excel.Workbooks[1].SaveAs("另存文件的路径",Nothing,Nothing,Nothing,Nothing,Nothing,asm,Nothing,Nothing,Nothing,Nothing); 
        excel.Workbooks.Close(); 
       } 
       catch(Exception e) 
       { 
         Console.WriteLine("Error Stack {0} ", e.Message)   ; 
       } 
      finally 
      { 
        ; 
      } 


    用:Csc.exe /r:excel.dll /r:office.dll /r:vbide.dll excel.cs 生成EXE文件 如果需要更多的EXCEL方法,可以用.net的OLE/COM游览器打开EXCEL9.OLE文件,可以看到所提供的详细方法
      

  3.   

    晕,你这个内容,我在GOOGLE上搜索到,至少有10个网站收集了,
    我就是自己写代码,没有测试通过,所以看看有没有其他人做过,看看完整的例子
      

  4.   

    出现这个错误,:
    初始化Excel文件出错,错误信息如下: System.UnauthorizedAccessException: 拒绝访问。该怎么解决呀
      

  5.   

    在服务器上搞Excel操作很容易出现拒绝访问这个错误,原因是与安全设置有关。起初我也想在服务器端做Excel操作,结果把全部权限给了Everone还是出这个错,最后我不得不把Excel相关操作放到客户端去了。
      

  6.   

    给权限对应的用户。2003  是IISWPG  2000是IWAM_机器名称
      

  7.   

    可以写一个Active控件实现,用vb写一个com组件最容易,VBA,就是把一个excel中的所有sheets拷贝到另外一个excel文件中,几步就可以了
    =================================================
    读写2个EXCEL文件,并合并成一个EXCEL文件
    =================================================
    在win32应用程序中实现过,web上应该也可以的
      

  8.   

    现在权限是没有错误了,但是,怎么读取EXCEL的数据呢?执行这条语句的时候,错误:
    Response.Write((string)wksheet1.Cells[n,m]);错误信息如下: System.Runtime.InteropServices.COMException (0x800A03EC): HRESULT 中的异常:0x800A03EC。 at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Excel.Range.get__Default(Object RowIndex, Object ColumnIndex)