我想实现一个资料的浏览..在浏览的页面上可以提供保存内容
以xls  或是 doc 保存.也就是下载到本地思路是.在服务器端 
加载一个excel 或 word 对象然后在內存中建立他們的工作區对象(也就是.doc或.xls的文件)把數据库中需要的数据写入工作区当中.然后保存然后以字节的形式将工作区对象读取到字节数组中用Response.BinaryWrite把字节数组写入到输出流Response.ContentType 类型可以自己定义.但有些问题..怎么运用excel 或 word的对象创建一個xls或doc?
看了他的方法都是open的..需要物理的文件.哪位做过的朋友帮帮忙啊~~~

解决方案 »

  1.   

    为什么一定要OPEN,documents 集合不是有ADD方法吗
      

  2.   

    greystar(greystar) ( ) 信誉:100 
    能不能提示下。。写法?需不需要物理文件??我想这些东西都是在内存中..然后把数据直接写进去然后把整个.xls的对象都以字节方式读到http流中输出..
      

  3.   

    nstorm(网の风) ( ) 信誉:98 我的那想构想实现不了吧???
      

  4.   

    下面的代碼在ASP.net中是怎麽寫的啊
    那些方法和属性在ASP.net对不上号啊
    class AppTest
     {
      private Excel.ApplicationClass _x;
      public static void Main0()
      {
       AppTest a = new AppTest();
       a._x = new Excel.ApplicationClass();
       a._x.UserControl = false;
       for (int i = 0 ;i < 4; i++)
       {
        
        a.SaveToXls("D:\\test\\" + i + ".xls");  // 本例是在D盘下建立的test文件夹
       }
       a._x.Quit();
       System.Runtime.InteropServices.Marshal.ReleaseComObject((object) a._x);
       System.GC.Collect();
      }  private void SaveToXls(string filename)
      {
       Excel.WorkbookClass wb = (Excel.WorkbookClass) this._x.Workbooks.Add(System.Reflection.Missing.Value);
       for(int i = 1;i <= 4; i++)
       {
        this._x.Cells[i,1]=i.ToString();
        this._x.Cells[i,2]="'bbb2";
        this._x.Cells[i,3]="'ccc3";
        this._x.Cells[i,4]="'aaa4";
       }
       
       wb.Saved = true;
       this._x.ActiveWorkbook.SaveCopyAs(filename);
      }
     }
      

  5.   

    在内存中动态创建office文档,还需要在VS.NET中装个Visual Studio .NET Tools for Office System.iso的安装包,安装盘上没有哈,网上找找看,有下载的只要把里面的东西弄清楚了,就可以用System.Web.HttpContext.Current.Response.OutputStream.Write方法直接写内存中的office文档(非物理文件)到客户端下载
      

  6.   

    现将数据生成datatable,然后传入下面的函数,在服务器端生成一个csv文件:
        Public Shared Function DataTableToExcelCsv(ByVal dt As DataTable) As Boolean
            'create title
            Dim strTemp, strFileName As String
            Dim sbExcel As New StringBuilder
            Dim chEnter As Char = Chr(10)
            Dim i, j As Integer
            Dim bExcel() As Byte
            Dim Dr As DataRow        '第一行
            sbExcel.Append(dt.Rows(0)("SearchKey"))
            sbExcel.Append(chEnter)
            dt.Rows(0)("SearchKey") = ""
           '第二行以后
            For i = 0 To dt.Rows.Count - 1
                Dr = dt.Rows(i)
                strTemp = ""
                For j = 0 To dt.Columns.Count - 1
                    strTemp = strTemp + Dr(j).ToString().Trim() + ","
                Next j
                strTemp = strTemp + chEnter
                sbExcel.Append(strTemp)
            Next i        'csv保存路径
            Dim savePath = "c:\"        '文件名
            Dim serverFile As String = Current.Session.SessionID & ".csv"
            savePath += serverFile        bl = Nothing        bExcel = Encoding.Default.GetBytes(sbExcel.ToString())        Try
                Dim fs As New FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write)
                fs.Write(bExcel, 0, bExcel.Length)
                fs.Close()
            Catch ex As Exception
                Return False
            End Try        Return True    End Function在页面调用下列方法,下载到客户端,然后删除服务器端的文件:
       Private Function DownloadFile() As Boolean
            Try
                Dim FileName As String
     
                Dim savePath = "c:\"
                bl = Nothing            Dim serverFile As String = Session.SessionID & ".csv"
                savePath += serverFile
                'Client保存路径
                Dim clientfile As String = DateTime.Now.ToString("yyyyMMdd_hhmmss") & ".csv"
                'Read FileData
                Dim fs As IO.FileStream = System.IO.File.OpenRead(savePath)
                Dim FileData(fs.Length) As Byte
                fs.Read(FileData, 0, fs.Length)
                fs.Close()
                'Delete File
                System.IO.File.Delete(savePath)            FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(clientfile))            With Context.Response
                    .Clear()
                    .AddHeader("Content-Type", "application/x-binary")
                    .AddHeader("Content-Disposition", "inline;filename=" _
                                + System.Convert.ToChar(34) + FileName + System.Convert.ToChar(34))
                    .BinaryWrite(FileData)
                    '.End()
                End With            Return True
            Catch ex As Exception
                Return False
            End Try
        End Function
    ==========================================================================
    上面的DownloadFile方法写在一个新的aspx页中,假如有两个页面a.aspx,b.aspx,那么在a.aspx中调用DataTableToExcelCsv方法,然后response.redirect("b.aspx"),在b.aspx的page_load里,调用下面的方法.当然我写的是生成csv文件,你可以改成excel文件,思路是一样的