久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

在Asp.net用C#建立動(dòng)態(tài)Excel(外文翻譯)

 whli88 2007-10-06
在Asp.net用C#建立動(dòng)態(tài)Excel(外文翻譯)
2007-09-18 17:26

在Asp.net中建立本地的Excel表,,并由服務(wù)器向外傳播是容易實(shí)現(xiàn)的,而刪除掉嵌入的Excel.exe進(jìn)程是困難的,。所以 你不要打開(kāi)任務(wù)管理器 ,看Excel.exe進(jìn)程相關(guān)的東西是否還在內(nèi)存里面,。我在這里提供一個(gè)解決方案 ,,里面提供了兩個(gè)方法 :
"CreateExcelWorkbook"(說(shuō)明 建立Excel工作簿) 這個(gè)方法 運(yùn)行一個(gè)存儲(chǔ)過(guò)程 ,,返回一個(gè)DataReader 并根據(jù)DataReader 來(lái)生成一個(gè)Excel工作簿 ,,并保存到文件系統(tǒng)中,,創(chuàng)建一個(gè)“download”連接,,這樣 用戶就可以將Excel表導(dǎo)入到瀏覽器中也可以直接下載到機(jī)器上,。

第二個(gè)方法:GenerateCSVReport 本質(zhì)上是做同樣的一件事情,,僅僅是保存的文件的CSV格式 。仍然 導(dǎo)入到Excel中,,CSV代碼能解決一個(gè)開(kāi)發(fā)中的普片的問(wèn)題:你有一列 里面倒入了多個(gè)零,,CSV代碼能保證零不變空 ,。(說(shuō)明: 就是在Excel表中多個(gè)零的值 不能保存的問(wèn)題)

 

    在可以下載的解決方案中,,包含一個(gè)有效的類 ” SPGen” 能運(yùn)行存儲(chǔ)過(guò)程并返回DataReader ,,一個(gè)移除文件的方法 能刪除早先于一個(gè)特定的時(shí)間值,。下面出現(xiàn)的主要的方法就是CreateExcelWorkbook

 

    注意:你必須知道 在運(yùn)行這個(gè)頁(yè)面的時(shí)候,,你可能需要能在WebSever 服務(wù)器的文件系統(tǒng)中寫 Excel,,Csv文件的管理員的權(quán)限,。處理這個(gè)問(wèn)題的最簡(jiǎn)單的方法就是運(yùn)行這個(gè)頁(yè)面在自己的文件夾里面并包括自己的配置文件。并在配置文件中添加下面的元素<identity impersonate ="true" ... ,。你仍然需要物理文件夾的訪問(wèn)控制列表(ACL)的寫的權(quán)限,,只有這樣運(yùn)行的頁(yè)面的身份有寫的權(quán)限,最后,,你需要設(shè)置一個(gè)Com連接到Excel 9.0 or Excel 10 類型庫(kù) ,VS.NET 將為你生成一個(gè)裝配件,。我相信 微軟在他們Office網(wǎng)站上有一個(gè)連接,可以下載到微軟的初始的裝配件 ,。(可能不準(zhǔn),我的理解是面向.net的裝配件)

 

<identity impersonate="true" userName="adminuser" password="adminpass" />

 

特別注意 下面的代碼塊的作用是清除Excel的對(duì)象。

 

// Need all following code to clean up and extingush all references!!!
oWB.Close(null,null,null);
oXL.Workbooks.Close();
oXL.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (oRng);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oXL);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);
oSheet=null;
oWB=null;
oXL = null;
GC.Collect(); // force final cleanup!

 

 

這是必須的 ,,因?yàn)閛Sheet", "oWb" , 'oRng", 等等 對(duì)象也是COM的實(shí)例,我們需要

Marshal類的ReleaseComObject的方法把它們從.NET去掉

private void CreateExcelWorkbook(string spName, SqlParameter[] parms)
{
string strCurrentDir = Server.MapPath(".") + "\\";
RemoveFiles(strCurrentDir); // utility method to clean up old files
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
Excel.Range oRng;

try
{
GC.Collect();// clean up any other excel guys hangin' around...
oXL = new Excel.Application();
oXL.Visible = false;
//Get a new workbook.
oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
//get our Data

string strConnect = System.Configuration.ConfigurationSettings.AppSettings["connectString"];
SPGen sg = new SPGen(strConnect,spName,parms);
SqlDataReader myReader = sg.RunReader();
// Create Header and sheet...
int iRow =2;
for(int j=0;j<myReader.FieldCount;j++)
{
oSheet.Cells[1, j+1] = myReader.GetName(j).ToString();
}
// build the sheet contents
while (myReader.Read())
{
for(int k=0;k < myReader.FieldCount;k++)
{
oSheet.Cells[iRow,k+1]= myReader.GetValue(k).ToString();
}
iRow++;
}// end while
myReader.Close();
myReader=null;
//Format A1:Z1 as bold, vertical alignment = center.
oSheet.get_Range("A1", "Z1").Font.Bold = true;
oSheet.get_Range("A1", "Z1").VerticalAlignment =Excel.XlVAlign.xlVAlignCenter;
//AutoFit columns A:Z.
oRng = oSheet.get_Range("A1", "Z1");
oRng.EntireColumn.AutoFit();
oXL.Visible = false;
oXL.UserControl = false;
string strFile ="report" + System.DateTime.Now.Ticks.ToString() +".xls";
oWB.SaveAs( strCurrentDir + strFile,Excel.XlFileFormat.xlWorkbookNormal,
      null,null,false,false,Excel.XlSaveAsAccessMode.xlShared,false,false,null,null,null);
// Need all following code to clean up and extingush all references!!!
oWB.Close(null,null,null);
oXL.Workbooks.Close();
oXL.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (oRng);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oXL);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);
oSheet=null;
oWB=null;
oXL = null;
GC.Collect(); // force final cleanup!
string strMachineName = Request.ServerVariables["SERVER_NAME"];
errLabel.Text="<A href=http://" + strMachineName +"/ExcelGen/" +strFile + ">Download Report</a>";

}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat( errorMessage, theException.Message );
errorMessage = String.Concat( errorMessage, " Line: " );
errorMessage = String.Concat( errorMessage, theException.Source );
errLabel.Text= errorMessage ;
}
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多