这个问题是比较麻烦的了,如果是.Net就好说了,我也是指给你提醒一下,剩下的就看你自己了
{
使用一个页面改页面显示excel,注意只是显示,并提供下载功能,
下载这后,用户就可以对其进行更改了,
更改完后就可以进行上传了,
你在得到上船文件后,就可以一航一行的读取数据了,(*.csv 文件按','分割读取)
在上传的文件通过了你的验证逻辑后,你就可以把它(写入数据库||写入文件)就看你的需求了
少后我将给一个个.net的例子(用于启发你)是我以前写的。
}

解决方案 »

  1.   

    public static DataSet GetTempFileDB(System.Web.UI.HtmlControls.HtmlInputFile fileUp)
    {
    //保存临时文件
    string fn=SaveTempFile(fileUp); DataSet ds=null;
    //获取数据
    if(IsTextFile(fn))
    {
    ds=new DataSet("DataSet1");
    DataTable dt=CSVToDataTable(fn);
    dt.Rows.RemoveAt(0);
    UpdateTableColumn(dt);
    ds.Tables.Add(dt);
    }
    else
    ds=GetDBFromExcel(fn); return ds;
    }
    /// <summary>
    /// 判断是否为CSV文件
    /// </summary>
    /// <param name="fileName"></param>
    public static bool IsTextFile(string fileName)
    {
    string extName=System.IO.Path.GetExtension(fileName).ToLower();
    if(extName==".csv"||extName=="txt")
    return true;
    return false;
    }
    /// <summary>
    /// 把一个DataTable转化为一个CSV文件
    /// </summary>
    /// <param name="dt">DataTable对象</param>
    /// <param name="title">总的标题</param>
    /// <param name="ld">dbColName---->表的标题</param>
    /// <param name="isShowDBColName">是否现实数据库列名称</param>
    /// <param name="page"></param>
    /// <returns></returns>
    public static string DataTableToCSV(DataTable dt,string title,ListDictionary ld,bool isShowDBColName,System.Web.UI.Page page)
    {
    string path=page.MapPath(System.Web.HttpRuntime.AppDomainAppVirtualPath)+"/Temp/"; if(!Directory.Exists(path))
    Directory.CreateDirectory(path);
    string fileName=System.Guid.NewGuid().ToString()+".csv";
    FileStream oStream=File.Create(path+fileName);
    StreamWriter oWriter=new StreamWriter(oStream,Encoding.GetEncoding("GB2312"));
    //添加标题
    oWriter.Write(title+",");
    oWriter.Write(oWriter.NewLine);
    //显示表的标题
    if(ld!=null)
    {
    foreach(string name in ld.Values)
    oWriter.Write(name.Trim()+",");
    oWriter.Write(oWriter.NewLine);
    }
    if(dt!=null)
    {
    //添加Column名称列
    if(isShowDBColName)
    {
    foreach(string col in ld.Keys)
    oWriter.Write(col+",");
    oWriter.Write(oWriter.NewLine);
    }
    //添加具体数据
    foreach(DataRow row in dt.Rows)
    {
    foreach(string col in ld.Keys)
    { string str=row[col].ToString().Trim().Replace(",","/");
    oWriter.Write(str+",");
    }
    oWriter.Write(oWriter.NewLine);
    }
    }
    oWriter.Flush();
    oWriter.Close();
    oStream.Close();
    return path+fileName;
    } /// <summary>
    /// 把一个DataView转化为一个CSV文件
    /// </summary>
    /// <param name="dt">DataTable对象</param>
    /// <param name="title">总的标题</param>
    /// <param name="ld">dbColName---->表的标题</param>
    /// <param name="isShowDBColName">是否现实数据库列名称</param>
    /// <param name="page"></param>
    /// <returns></returns>
    public static string DataViewToCSV(DataView dv,string title,ListDictionary ld,bool isShowDBColName,System.Web.UI.Page page)
    {
    string path=page.MapPath(System.Web.HttpRuntime.AppDomainAppVirtualPath)+"/Temp/"; if(!Directory.Exists(path))
    Directory.CreateDirectory(path);
    string fileName=System.Guid.NewGuid().ToString()+".csv";
    FileStream oStream=File.Create(path+fileName);
    StreamWriter oWriter=new StreamWriter(oStream,Encoding.GetEncoding("GB2312"));
    //添加标题
    oWriter.Write(title+",");
    oWriter.Write(oWriter.NewLine);
    //显示表的标题
    if(ld!=null)
    {
    foreach(string name in ld.Values)
    oWriter.Write(name.Trim()+",");
    oWriter.Write(oWriter.NewLine);
    }
    if(dv!=null)
    {
    //添加Column名称列
    if(isShowDBColName)
    {
    foreach(string col in ld.Keys)
    oWriter.Write(col+",");
    oWriter.Write(oWriter.NewLine);
    }
    //添加具体数据
    for(int i=0; i<dv.Count; i++)
    {
    foreach(string col in ld.Keys)
    {
    string str=dv[i][col].ToString().Trim();
    oWriter.Write(str+",");
    }
    oWriter.Write(oWriter.NewLine);
    }
    /*
    foreach(DataRow row in dt.Rows)
    {
    foreach(string col in ld.Keys)
    {
    string str=row[col].ToString().Trim();
    oWriter.Write(str+",");
    }
    oWriter.Write(oWriter.NewLine);
    }
    */
    }
    oWriter.Flush();
    oWriter.Close();
    oStream.Close();
    return path+fileName;
    }
      

  2.   

    #region 使用StreamReader将CVS文件转化为一个DataTable
    /// <summary>
    /// 将一个CVS文件转化为一个DataTable
    /// </summary>
    /// <param name="fn"></param>
    /// <returns></returns>
    public static DataTable CSVToDataTable(string fn)
    {
    FileStream stream=File.Open(fn,FileMode.Open);
    StreamReader reader=new StreamReader(stream,System.Text.Encoding.GetEncoding("GB2312"));
    string line="";
    DataTable dt=new DataTable("sadf"); while((line=reader.ReadLine())!=null)
    {
    string[] values=line.Split(new char[]{','}); int count=dt.Columns.Count;
    int addNum=values.Length-count;
    if(addNum>0)
    AddColumn(dt,addNum); DataRow row=dt.NewRow();
    for(int num=0;num<values.Length;num++)
    row[num]=values[num];
    dt.Rows.Add(row);
    }
    reader.Close();
    stream.Close(); return dt;
    }
      

  3.   

    response.setHeader("Content-Disposition","attachment;filename='filename.xls'");
    response.setContentType("我不知道 Excel 的 MimeType, 自己找");