在用戶端(非服務端) ,選擇本地檔案夾,一次導出多個excel。
前台:
<div>
<asp:LinkButton class="linktext" id="lnbExcel" runat="server" onclick="lnbExcel_Click" >
導出excel</asp:LinkButton>
</div>
<script>
function browseFolder(path) {
try {
var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //選擇框提示資訊
var Shell = new ActiveXObject("Shell.Application");
var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目錄為:我的電腦
//var Folder = Shell.BrowseForFolder(0, Message, 0); //起始目錄為:桌面
if (Folder != null) {
Folder = Folder.items(); // 傳回 FolderItems 對象
Folder = Folder.item(); // 傳回 Folderitem 對象
Folder = Folder.Path; // 傳回路徑
if (Folder.charAt(Folder.length - 1) != "\\") {
Folder = Folder + "\\";
}
document.getElementById(path).value = Folder;
return Folder;
}
}
catch (e) {
alert(e.message);
}
}
</script>
<table>
<tr>
<td>選擇導入資料源:</td>
<td><asp:TextBox ID="path"
runat="server"></asp:TextBox></td>
<td><input type=button value="選擇" onclick="browseFolder('path')"></td>
</tr>
</table>
背景
//導出EXCEL
protected void lnbExcel_Click(object sender, EventArgs e)
{
#region dataTable導出到excel 彈出儲存對話框
for (int i = 0; i < 2; i++)
{
string saveFileName = path.Text + i;
int rowIndex = 1; //開始寫入資料的單元格行
int colIndex = 0; //開始寫入資料的單元格列
System.Reflection.Missing miss = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application mExcel = new Microsoft.Office.Interop.Excel.Application();
mExcel.Visible = false;
Microsoft.Office.Interop.Excel.Workbooks mBooks = (Microsoft.Office.Interop.Excel.Workbooks)mExcel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook mBook = (Microsoft.Office.Interop.Excel.Workbook)(mBooks.Add(miss));
Microsoft.Office.Interop.Excel.Worksheet mSheet = (Microsoft.Office.Interop.Excel.Worksheet)mBook.ActiveSheet;
//Microsoft.Office.Interop.Excel.Range er = mSheet.get_Range((object)"A1", System.Reflection.Missing.Value); //向Excel檔案中寫入标題文本
//er.Value2 = fileName.Substring(0, fileName.LastIndexOf('.'));
try
{
colIndex++;
mSheet.Cells[1, colIndex] = "列1";//輸出DataGridView列頭名
rowIndex++;
colIndex = 0;
colIndex++;
mSheet.Cells[rowIndex, colIndex] = "'" + "支部到";
//擷取你使用的excel 的版本号
string _strVersion = mExcel.Version;
int FormatNum = 0x00;
if (Convert.ToDouble(_strVersion) < 12)//You use Excel 97-2003
{
FormatNum = -4143;
}
else//you use excel 2007 or later
{
FormatNum = 56;
}
//儲存工作已寫入資料的工作表
mBook.SaveAs(saveFileName, FormatNum, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss);
//mBook.SaveAs(saveFileName, FormatNum, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss);
}
catch (Exception ee)
{
throw new Exception(ee.Message);
}
finally //finally中的代碼主要用來釋放記憶體和中止程序()
{
mBook.Close(true, miss, miss);
mBooks.Close();
mExcel.Quit();
//System.Runtime.InteropServices.Marshal.ReleaseComObject(er);
System.Runtime.InteropServices.Marshal.ReleaseComObject(mSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(mBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(mBooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(mExcel);
GC.Collect();
}
}
#endregion
命名空間 using Microsoft.Office.Interop.Excel;
IE測試通過。在檔案名沖突時可能報其他錯誤。
另,在可能受服務端excel配置影響報一下錯誤:
檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的元件失敗,原因是出現以下錯誤: 80070005 拒絕通路。 (異常來自 HRESULT:0x80070005 (E_ACCESSDENIED))。
說明: 執行目前 Web 請求期間,出現未經處理的異常。請檢查堆棧跟蹤資訊,以了解有關該錯誤以及代碼中導緻錯誤的出處的詳細資訊。
異常詳細資訊: System.UnauthorizedAccessException: 檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的元件失敗,原因是出現以下錯誤: 80070005 拒絕通路。 (異常來自 HRESULT:0x80070005 (E_ACCESSDENIED))。 (部分)...
附加決解方案連接配接
http://blog.csdn.net/zijings8374/article/details/4256005(未測試 0..0)
檢索COM 類工廠中CLSID 為 {00024500-0000-0000-C000-000000000046}的元件時失敗
在項目中将資料導出為Excel格式時出現“檢索COM 類工廠中CLSID 為 {00024500-0000-0000-C000-000000000046}的元件時失敗,原因是出現以下錯誤: 80070005”,從網上搜了一下有如下解決方案:
1:在伺服器上安裝office的Excel軟體.
2:在"開始"->"運作"中輸入dcomcnfg.exe啟動"元件服務"
3:依次輕按兩下"元件服務"->"計算機"->"我的電腦"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 應用程式",在它上面點選右鍵,然後點選"屬性",彈出"Microsoft Excel 應用程式屬性"對話框
5:點選"辨別"标簽,選擇"互動式使用者"
6:點選"安全"标簽,在"啟動和激活權限"上點選"自定義",然後點選對應的"編輯"按鈕,在彈出的"安全性"對話框中填加
一個"ASP.net"使用者(注意要選擇本計算機名),并給它賦予"本地啟動"和"本地激活"權限.
7:依然是"安全"标簽,在"通路權限"上點選"自定義",然後點選"編輯",在彈出的"安全性"對話框中也填加一個"ASP.net"使用者,然後賦予"本地通路"權限.
這樣,我們便配置好了相應的Excel的DCOM權限.
注意:這是在WINxp上配置的,在2003上,ASP.net使用者改為NETWORK
SERVICE使用者。
根據上述操作了一遍,結果還是這個錯誤,後來在元件服務中又将“Microsoft Office Excel 預覽器”配置了一遍才解決問題,配置過程如下:
1、在"DCOM配置"中找到"Microsoft Office Excel 預覽器",在它上面點選右鍵,然後點選"屬性",彈出"Microsoft
Office Excel 預覽器屬性"對話框
2、點選"安全"标簽,在"啟動和激活權限"上點選"自定義",然後點選對應的"編輯"按鈕,在彈出的"安全性"對話框中填加