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

分享

DataSet導(dǎo)出到Excel比較完整的解決方案(二)--服務(wù)器端生成文件(downmoon) (上)

 mylore 2011-12-11

  在前一篇文章中,,介紹了DataSet導(dǎo)出到Excel時(shí)客戶端生成文件的幾種思路,接著往下說,,服務(wù)器端生成文件,,用戶直接下載,應(yīng)該格式是可以保證的,!

  于是直接調(diào)用Excel的API生成,。代碼如下:

  DataSetToLocalExcel

public static void DataSetToLocalExcel(DataSet dataSet, string outputPath, bool deleteOldFile)
    {
      if (deleteOldFile)
      {
        if (System.IO.File.Exists(outputPath)) { System.IO.File.Delete(outputPath); }
      }
      // Create the Excel Application object
      ApplicationClass excelApp = new ApplicationClass();
  
      // Create a new Excel Workbook
      Workbook excelWorkbook = excelApp.Workbooks.Add(Type.Missing);
  
      int sheetIndex = 0;
  
      // Copy each DataTable
      foreach (System.Data.DataTable dt in dataSet.Tables)
      {
  
        // Copy the DataTable to an object array
        object[,] rawData = new object[dt.Rows.Count + 1, dt.Columns.Count];
  
        // Copy the column names to the first row of the object array
        for (int col = 0; col < dt.Columns.Count; col++)
        {
          rawData[0, col] = dt.Columns[col].ColumnName;
        }
  
        // Copy the values to the object array
        for (int col = 0; col < dt.Columns.Count; col++)
        {
          for (int row = 0; row < dt.Rows.Count; row++)
          {
            rawData[row + 1, col] = dt.Rows[row].ItemArray[col];
          }
        }
  
        // Calculate the final column letter
        string finalColLetter = string.Empty;
        string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        int colCharsetLen = colCharset.Length;
  
        if (dt.Columns.Count > colCharsetLen)
        {
          finalColLetter = colCharset.Substring(
            (dt.Columns.Count - 1) / colCharsetLen - 1, 1);
        }
  
        finalColLetter += colCharset.Substring(
            (dt.Columns.Count - 1) % colCharsetLen, 1);
  
        // Create a new Sheet
        Worksheet excelSheet = (Worksheet)excelWorkbook.Sheets.Add(
          excelWorkbook.Sheets.get_Item(++sheetIndex),
          Type.Missing, 1, XlSheetType.xlWorksheet);
  
        excelSheet.Name = dt.TableName;
  
        // Fast data export to Excel


        string excelRange = string.Format("A1:{0}{1}",
          finalColLetter, dt.Rows.Count + 1);
  
        excelSheet.get_Range(excelRange, Type.Missing).Value2 = rawData;
  
        // Mark the first row as BOLD
        ((Range)excelSheet.Rows[1, Type.Missing]).Font.Bold = true;
      }
      //excelApp.Application.AlertBeforeOverwriting = false;
      excelApp.Application.DisplayAlerts = false;
      // Save and Close the Workbook
      excelWorkbook.SaveAs(outputPath, XlFileFormat.xlWorkbookNormal, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
      excelWorkbook.Close(true, Type.Missing, Type.Missing);
      excelWorkbook = null;
  
      // Release the Application object
      excelApp.Quit();
      excelApp = null;
  
      // Collect the unreferenced objects
      GC.Collect();
      GC.WaitForPendingFinalizers();
  
    }
  說明下,其中的 xlSAPp.Application.DisplayAlerts  =  false; 的作用是不顯示確認(rèn)對(duì)話框  

  也可以逐Cell讀取,,那樣可能會(huì)慢,。本方法速度還過得去。

  生成Winform代碼測(cè)試沒錯(cuò),,部署時(shí),,以為只要引用兩個(gè)dll就可以了

  Microsoft.Office.Interop.Excel.dll

  Office.dll

  那成想,問題接著來了,,當(dāng)在WebForm下調(diào)用時(shí),, 提示“檢索  COM  類工廠中  CLSID  為  {00024500-0000-0000-C000-000000000046}  的組件時(shí)失敗,原因是出現(xiàn)以下錯(cuò)誤:  8000401a ”

  暈,! Google下,,解決方案是在服務(wù)器上安裝Office,并配置DCOM權(quán)限。步驟如下:

  配置 DCOM 中 EXCEL 應(yīng)用程序:

  要在交互式用戶帳戶下設(shè)置 Office 自動(dòng)化服務(wù)器,,請(qǐng)按照下列步驟操作:

  1. 以管理員身份登錄到計(jì)算機(jī),,并使用完整安裝來安裝(或重新安裝)Office。為了實(shí)現(xiàn)系統(tǒng)的可靠性,,建議您將 Office CD-ROM 中的內(nèi)容復(fù)制到本地驅(qū)動(dòng)器并從此位置安裝 Office,。

  2. 啟動(dòng)要自動(dòng)運(yùn)行的 Office 應(yīng)用程序。這會(huì)強(qiáng)制該應(yīng)用程序進(jìn)行自我注冊(cè),。

  3. 運(yùn)行該應(yīng)用程序后,,請(qǐng)按 Alt+F11 以加載 Microsoft Visual Basic for Applications (VBA) 編輯器。這會(huì)強(qiáng)制 VBA 進(jìn)行初始化,。

  4. 關(guān)閉應(yīng)用程序,,包括 VBA。

  5. 單擊開始,,單擊運(yùn)行,,然后鍵入 DCOMCNFG。選擇要自動(dòng)運(yùn)行的應(yīng)用程序,。應(yīng)用程序名稱如下所示:

Microsoft Access 97 - Microsoft Access 數(shù)據(jù)庫(kù)
Microsoft Access 2000/2002 - Microsoft Access 應(yīng)用程序
Microsoft Excel 97/2000/2002 - Microsoft Excel 應(yīng)用程序
Microsoft Word 97 - Microsoft Word Basic
Microsoft Word 2000/2002 - Microsoft Word 文檔

  單擊屬性打開此應(yīng)用程序的屬性對(duì)話框,。

  6. 單擊安全選項(xiàng)卡,。驗(yàn)證使用默認(rèn)的訪問權(quán)限和使用默認(rèn)的啟動(dòng)權(quán)限已選中。

  7. 單擊標(biāo)識(shí)選項(xiàng)卡,,然后選擇交互式用戶,。

  8. 單擊確定,關(guān)閉屬性對(duì)話框并返回主應(yīng)用程序列表對(duì)話框,。

  9. 在 DCOM 配置對(duì)話框中,,單擊默認(rèn)安全性選項(xiàng)卡。

  10. 單擊訪問權(quán)限的編輯默認(rèn)值,。驗(yàn)證訪問權(quán)限中是否列出下列用

戶,,如果沒有列出,則添加這些用戶:
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_ <machinename> *
IWAM_ <machinename> *

  * 這些帳戶僅在計(jì)算機(jī)上安裝了 Internet Information Server (IIS) 的情況下才存在,。

  11. 確保允許每個(gè)用戶訪問,,然后單擊確定。

  12. 單擊啟動(dòng)權(quán)限的編輯默認(rèn)值,。驗(yàn)證啟動(dòng)權(quán)限中是否列出下列用戶,,如果沒有列出,則添加這些用戶:

  SYSTEM

  INTERACTIVE

  Everyone

  Administrators

  IUSR_ <machinename> *

  IWAM_ <machinename> *

  * 這些帳戶僅在計(jì)算機(jī)上安裝有 IIS 的情況下才存在,。

  13. 確保允許每個(gè)用戶訪問,,然后單擊確定。

  14. 單擊確定關(guān)閉 DCOMCNFG,。

  如果你之前起用了身份模擬 (在 Web.config 中配置了 <identity impersonate= "true "/> ) ,需要?jiǎng)h除之!

  15.更新安裝Office,,把.net可編程組件安裝到本機(jī)(Excel組件)

  如果還是不行.干脃把交互式用戶 換成"啟動(dòng)用戶"

  折騰了一番,總算可以用了,!·只是服務(wù)器上裝Office總感覺不爽,,于是再嘗試下別的方法:

  Reading and Writing Excel using OLEDB


文章出處:飛諾網(wǎng)(www.):http://www./course/7_databases/sql/msxl/20100702/310017.html

    本站是提供個(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)論公約

    類似文章 更多