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