怎麼在EXECL檔案中同時匯入資料和插入圖片?

來源:互聯網
上載者:User
因為項目需要在匯出資料到EXECL文檔的同時還需要匯出圖片進去,在處理是遇到的一些問題,在此記錄一下。

首先代碼寫好之後放測試伺服器上去執行的時候報錯了,報檢索 COM 類別工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005。

這個解決方案我基本上是按照網上來進行解決的,但是需要注意的就是,設定完許可權之後,還需要在伺服器安裝的office檔案夾分配許可權。

許可權問題設定完之後就是調試代碼了,網上搜尋到的資料都是先插入資料,然後在資料的最後插入圖片,而不是我想要的每一行都有圖片,所以不符合我的需求,於是就自己看著網上的代碼整吧整吧。

/// <summary>/// /// </summary>/// <param name="dt">資料來源</param>/// <param name="filepath">檔案路勁例如(E:\\Execl\\201706070001.xls)</param>protected void ExportExcel(DataTable dt, string filepath)        {if (dt == null || dt.Rows.Count == 0) return;            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();object m_objOpt = System.Reflection.Missing.Value;if (xlApp == null)            {return;            }//System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;            Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);            Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];            Microsoft.Office.Interop.Excel.Range range;long totalCount = dt.Rows.Count;long rowRead = 0;for (int i = 0; i < dt.Columns.Count; i++)            {                worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;                range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];                range.Interior.ColorIndex = 15;            }for (int r = 0; r < dt.Rows.Count; r++)            {for (int i = 0; i < dt.Columns.Count; i++)                {try{if (i == 4)                        {                            range = worksheet.get_Range("E" + (r + 2), m_objOpt); //這裡是因為我要給文檔的E列插入圖片,所以加了判斷,並寫死了E列                            range.Select();float PicLeft, PicTop;                            PicLeft = Convert.ToSingle(range.Left);                            PicTop = Convert.ToSingle(range.Top);                            range.ColumnWidth = 60;//設定儲存格的寬                            range.RowHeight = 120;//設定儲存格的高worksheet.Shapes.AddPicture(dt.Rows[r][i].ToString(), Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, PicLeft, PicTop, 100, 100);//這後面的100 是設定圖片的寬高                        }elseworksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString();                    }catch{                        worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString().Replace("=", "");                    }                }                rowRead++;            }            xlApp.Visible = true;            workbook.Saved = true;            workbook.SaveAs(filepath);            workbook.Close(true, Type.Missing, Type.Missing);            workbook = null;            xlApp.Quit();            xlApp = null;        }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.