海阔凭鱼跃,天空任鸟飞.

---------送给帮助过我进步的人,以及我帮助他进步的人
posts - 5, comments - 5, trackbacks - 0, articles - 11

最新评论

very good!
re: 修复iis无法打开默认专案的问题 Hu Yong Yuan 2006-10-27 09:45  
不好意思.好長時間沒來了.搬了一次家.
to 2006-10-18 23:59 by 望月
我用WIN SP2 只要找到NetworkService這個用戶加進去就行.
re: [原]總結我目前Excel報表的幾種方法 Hu Yong Yuan 2006-10-21 12:45  
C#在客戶端和服務端操作Excel文件
在客戶端把數據導入到Excel文件步驟
1、 創建Excel application對2、 象,3、 打開或生成Excel文件
//服務端創建StringBuilder對象
System.Text.StringBuilder sb=new System .Text .StringBuilder ();
//指定客戶端執行語言
sb.Append ("<Script Language=VBScript>");
sb.Append ("<!--\r\n");
sb.Append ("dim xls\r\n");
//創建Excel application對象
sb.Append ("Set xls=CreateObject(\"Excel.Application\")\r\n");
//打開Excel文件
sb.Append ("xls.WorkBooks.Open(C:\\MyExcel.xls)\r\n");
4、 選定工作表,5、 把數據導入到Excel
//選定欲操作的Excel表
sb.Append ("xls.Sheets(1).Select\r\n");
//获得要操作数据表的行、列数
int rows=dt.Rows.Count,cols=dt.Columns.Count ;
//按行列将数据写入Excel表
for (int j=brow+1;j<brow+cols ;j++)
for (int i=bcol;i<bcol+rows ;i++)
sb.Append ("xls.Sheets(1).Cells(" +(j-1) + "," + (i) + ")=\"" + dt.Rows[i-bcol][j-brow].ToString ().Replace ("\"","'") + "\"\r\n");
3、显示Excel文件
sb.Append ("xls.visible=true\r\n");
4、釋放創建的Excel application對象
sb.Append ("set xls=nothing\r\n");
sb.Append ("-->");
sb.Append ("</script>");
5、將代碼寫到客戶端
this.Page.RegisterClientScriptBlock("",sb.ToString ());
在服務端操作Excel文件
服務端操作Excel文件,是把Excel文件看作數據庫,把Excel工作表當作數據表
6、 創建連接並打開連接
protected System.Data .OleDb.OleDbConnection dbcnn;
cnnstr="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;\";Data Source=C:\\MyExcel.xls”;
dbcnn=new OleDbConnection (cnnstr);
dbcnn.Open ();
7、 創建OleDbCommand對8、 象用來操作Excel文件
protected System.Data .OleDb .OleDbCommand dbcmd;
dbcmd=new OleDbCommand();
dbcmd.Connection =dbcnn;
9、 操作Excel文件
//获得要操作数据表的行、列数
rows=dt.Rows.Count ;
cols=dt.Columns.Count-1 ;
//按行列将数据写入Excel文件Sheet1工作表
for(int i=0;i<rows;i++)
{
olestr=" insert into [Sheet1$] values(";
for(int j=0;j<cols;j++)
olestr=olestr+"'"+dt.Rows[i][j].ToString ()+"',";
olestr+="'"+Convert.ToDecimal (dt.Rows[i][cols].ToString ())+"')";
dbcmd.CommandText =olestr;
dbcmd.ExecuteNonQuery ();
}
10、 釋放OleDbCommand對11、 象、關閉連接
dbcmd.Dispose ();
dbcnn.Close ();
12、 可操作的SQL語句
//建立名為punchdate的工作表,並指明子段類型。
//創建工作表好處是可指定子段類型,否則都以字符串導出
CREATE TABLE punchdate(mno char(5), punchNum float)
//插入新數據
Insert into punchdate(mno,punchNum) values(‘09’,9000)
//更新數據
Update punchdate set punchNum=8000 where mno=’09’
13、 不14、 可操作的SQL語句
Delete from punchdate
15、 注意連接子串
//HDR=Yes 説明工作表第一行為子段名
"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;\";Data Source=C:\\MyExcel.xls”
//HDR=No 説明工作表沒有含子段名的行
"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=No;\";Data Source=C:\\MyExcel.xls”
16、 注意對17、 Web.config的設置
刪除以下項目
<identity impersonate="true" />
或者這樣設置
<identity impersonate="false" />
兩種方法的優缺點


操作Excel文件方法 優點 缺點
客戶端 數據導入到Excel文件時,很靈活,可將數據填入任意指定的存儲格,定位到任意位置 1、 在客戶端生成ActiveX控件,2、 要將3、 站點設置成可信站點或對4、 IE進行安全設置(降低了IE的安全性)
5、 對6、 調用的Excel模板文件,7、 用戶要有權讀寫
8、 在客戶端寫Excel文件速度比較慢
服務端 1、 對2、 調用的Excel模板文件,3、 只要ASP.NET有權讀寫即可
4、 在服5、 務端寫Excel文件速度比較快
6、 不7、 要對8、 IE進行特別設置 對操作的文件只能當作數據庫操作,不夠靈活,對數據的類型控制不夠靈活.有局限性.

四.用文件流方式.

命名空間:System.IO
StringBuilder sb=new StringBuilder();

StreamWriter tw=File.CreateText(Server.MapPath("toExcel/")+"file.xls");
sb.Append((char)9);
DataTable tb=new Select().getDs(strExcel,IPQCConn).Tables[0];
for(int i=0;i<tb.Rows.Count;++i)
{
for(int j=0;j<tb.Columns.Count;++j)
{
sb.Append(tb.Rows[i][j].ToString()+(char)9);
}
tw.WriteLine(sb);
sb.Remove(0,sb.Length);
sb.Append((char)9);
}
tw.Close();

Response.Write("<script>window.open('toExcel/file.xls');</script>");
這種方式利用文件流的形式將數據寫入擴展名為.xls的文件,然後我們打開這個文件.
優點:速度快.缺點:無格式.在寫中文時出現亂碼(這個問題有待解決).每次寫完文件後存於服務器需要下次報表時將上次報表的數據清除.
五.用DataGrid采取文件轉換的形式.
//原理:把數據填充到 DataGrid,然後把DataGrid内容放到一個輸出流裏面,並指定輸出流類型為 Excel。

DataSet myds=new DataSet();//定義 DataSet
DataGrid dg=new DataGrid ();//定義 DataGrid,
dg.BorderColor =Color.FromName ("#3366CC");//設定 DagaGrid
dg.HeaderStyle .Font .Size=FontUnit.Small ;
dg.HeaderStyle .ForeColor =Color.Blue ;
dg.HeaderStyle .Font .Bold =true; //end 設定
try //填充 DataSet
{
SqlConnection myconn=new SqlConnection(connStr);
SqlDataAdapter myda=new SqlDataAdapter("...............",myconn);
myconn.Open();
myda.Fill(myds);
}
catch(Exception ex)
{
Response.Write(ex.Message);
}//end
try //綁定 DataGrid
{
dg.DataSource =myds.Tables[0].DefaultView;
dg.DataBind ();
}
catch(Exception ex)
{
Response.Write("error:"+ex.Message);
}//end

System.IO .StringWriter sw =new System.IO.StringWriter();//字符串流
System.Web .UI .HtmlTextWriter hw =new System.Web.UI.HtmlTextWriter(sw);//html 流,用字符串流作參數
dg.RenderControl(hw);//把DataGrid 流變成字符串流。
Response.ContentType ="application/vnd.ms-excel";//定義輸出流類型為 excel 流。關鍵語句。
Response.ContentEncoding=System.Text.Encoding.GetEncoding("Big5");//指定編碼類型為大五碼
Response.Write(sw.ToString());//輸出流
Response.End();//結束

優點:轉換速度快.缺點.DataGrid列名如果為中文,則在轉換過程中有可能出現亂碼(這個問題有待解決).一般會正常轉換.
六.用DataGrid采取複制粘貼方式:
將數據導入DataGrid.鼠標拖動.選中所要導入的數據.右鍵複制.粘貼到Excel即可實現轉換.這種方法最原始,但好用.不會出現亂碼.但如果導到DataGrid 中的數據超多.則可能會出現”out of memory”問題. 還有一點:用戶難以接受這種方法。


还有一个就是我在本地用户和组中也找不到NT AUTHORITY\NetworkService这个网络用户只有一个aspnet用户
兄弟
你用的是2003系统吧
我用的xp2,也是你这个问题,到了regsvr32 asptxn.dll 这一步就出问题了,出现asptxn.dll 失败字样。想请问一下,怎么把NT AUTHORITY
\NetworkService加到Administrator组?