一、插圖的類(含2方法) using System; using System.Collections.Generic; using System.Text; //using Excel = Microsoft.Office.Interop.Excel; using Excel; using System.Windows.Forms; namespace ExcelReport { class InsertPicToExcel { /**//// <summary> /// 打開沒有模板的操作。 /// </summary> public void Open() { this.Open(String.Empty); } /**//// <summary> /// 功能:實現Excel應用程序的打開 /// </summary> /// <param name="TemplateFilePath">模板文件理路徑</param> 25 public void Open(string TemplateFilePath) 26 { 27 //打開對象 28 m_objExcel = new Excel.Application(); 29 m_objExcel.Visible = false; 30 m_objExcel.DisplayAlerts = false; 31 32 if (m_objExcel.Version != "11.0") 33 { 34 MessageBox.Show("您的 Excel 版本不是 11.0 (Office 2003),操作可能會出現問題。"); 35 m_objExcel.Quit(); 36 return; 37 } 38 39 m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks; 40 if (TemplateFilePath.Equals(String.Empty)) 41 { 42 m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt)); 43 } 44 else 45 { 46 m_objBook = m_objBooks.Open(TemplateFilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt, 47 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); 48 } 49 m_objSheets = (Excel.Sheets)m_objBook.Worksheets; 50 m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1)); 51 m_objExcel.WorkbookBeforeClose += new Excel.AppEvents_WorkbookBeforeCloseEventHandler(m_objExcel_WorkbookBeforeClose); 52 } 53 54 private void m_objExcel_WorkbookBeforeClose(Excel.Workbook m_objBooks, ref bool _Cancel) 55 { 56 MessageBox.Show("保存完畢!"); 57 } 58 59 /**//// <summary> 60 /// 將圖片插入到指定的單元格位置。 61 /// 注意:圖片必須是絕對物理路徑 62 /// </summary> 63 /// <param name="RangeName">單元格名稱,例如:B4</param> 64 /// <param name="PicturePath">要插入圖片的絕對路徑。</param> 65 public void InsertPicture(string RangeName, string PicturePath) 66 { 67 m_objRange = m_objSheet.get_Range(RangeName, m_objOpt); 68 m_objRange.Select(); 69 Excel.Pictures pics = (Excel.Pictures)m_objSheet.Pictures(m_objOpt); 70 pics.Insert(PicturePath, m_objOpt); 71 } 72 73 /**//// <summary> 74 /// 將圖片插入到指定的單元格位置,並設置圖片的寬度和高度。 75 /// 注意:圖片必須是絕對物理路徑 76 /// </summary> 77 /// <param name="RangeName">單元格名稱,例如:B4</param> 78 /// <param name="PicturePath">要插入圖片的絕對路徑。</param> 79 /// <param name="PictuteWidth">插入後,圖片在Excel中顯示的寬度。</param> 80 /// <param name="PictureHeight">插入後,圖片在Excel中顯示的高度。</param> 81 public void InsertPicture(string RangeName, string PicturePath, float PictuteWidth, float PictureHeight) 82 { 83 m_objRange = m_objSheet.get_Range(RangeName, m_objOpt); 84 m_objRange.Select(); 85 float PicLeft, PicTop; 86 PicLeft = Convert.ToSingle(m_objRange.Left); 87 PicTop = Convert.ToSingle(m_objRange.Top); 88 //參數含義: 89 //圖片路徑 90 //是否鏈接到文件 91 //圖片插入時是否隨文檔一起保存 92 //圖片在文檔中的座標位置(單位:points) 93 //圖片顯示的寬度和高度(單位:points) 94 //參數詳細信息參見:http://msdn2.microsoft.com/zh-cn/library/aa221765(office.11).aspx 95 m_objSheet.Shapes.AddPicture(PicturePath,Microsoft.Office.Core.MsoTriState.msoFalse, 96 Microsoft.Office.Core.MsoTriState.msoTrue, PicLeft, PicTop, PictuteWidth, PictureHeight); 97 } 98 99 /**//// <summary> 100 /// 將Excel文件保存到指定的目錄,目錄必須事先存在,文件名稱不一定要存在。 101 /// </summary> 102 /// <param name="OutputFilePath">要保存成的文件的全路徑。</param> 103 public void SaveFile(string OutputFilePath) 104 { 105 m_objBook.SaveAs(OutputFilePath, m_objOpt, m_objOpt, 106 m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 107 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); 108 109 this.Close(); 110 } 111 /**//// <summary> 112 /// 關閉應用程序 113 /// </summary> 114 private void Close() 115 { 116 m_objBook.Close(false, m_objOpt, m_objOpt); 117 m_objExcel.Quit(); 118 } 119 120 /**//// <summary> 121 /// 釋放所引用的COM對象。注意:這個過程一定要執行。 122 /// </summary> 123 public void Dispose() 124 { 125 ReleaseObj(m_objSheets); 126 ReleaseObj(m_objBook); 127 ReleaseObj(m_objBooks); 128 ReleaseObj(m_objExcel); 129 System.GC.Collect(); 130 System.GC.WaitForPendingFinalizers(); 131 } 132 /**//// <summary> 133 /// 釋放對象,內部調用 134 /// </summary> 135 /// <param name="o"></param> 136 private void ReleaseObj(object o) 137 { 138 try 139 { 140 System.Runtime.InteropServices.Marshal.ReleaseComObject(o); 141 } 142 catch { } 143 finally { o = null; } 144 } 145 146 private Excel.Application m_objExcel = null; 147 private Excel.Workbooks m_objBooks = null; 148 private Excel._Workbook m_objBook = null; 149 private Excel.Sheets m_objSheets = null; 150 private Excel._Worksheet m_objSheet = null; 151 private Excel.Range m_objRange = null; 152 private object m_objOpt = System.Reflection.Missing.Value; 153 } 154 155} 156
二、調用 1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8 9namespace ExcelReport 10{ 11 public partial class Form1 : Form 12 { 13 public Form1() 14 { 15 InitializeComponent(); 16 } 17 18 private void Form1_Load(object sender, EventArgs e) 19 { 20 InsertPicToExcel ipt = new InsertPicToExcel(); 21 ipt.Open(); 22 ipt.InsertPicture("B2", @"C:/Excellogo.gif"); 23 ipt.InsertPicture("B18", @"C:/Excellogo.gif", 120, 80); 24 ipt.SaveFile(@"C:/ExcelTest.xls"); 25 ipt.Dispose(); 26 } 27 28 } 29}
製作日期開頭的隨機號條形碼,比如2023-11-02-KH-0902,其中前面的“2023-11-02”是打印的時候調用電腦系統時間進行打印的,“-KH-”是固定不變的內容,後面的“0902”是四位隨機號,可以在標籤批量打印軟
最近在批量打印標籤的時候遇到了一個這樣的問題:Excel表數據中有些數據右側有一些空白符(空字符串),導入到中琅標籤製作軟件中之後,即便使用了“修剪空白”處理方法進行修剪右端不可見字符,數據右側的空白符還是處理不了,在軟件中會
DevExpress WinForms垂直&屬性網格組件旨在提供UI靈活性,它允許用戶顯示數據集中的單個行或在其90度倒置網格容器中顯示多行數據集。另外,用戶可以把它用作一個屬性網格,就像在Visual Studio IDE中那樣。 P.S
前言 小編之前分享過一篇文章叫《如何使用前端表格控件實現多數據源整合?》(可以放上文章的鏈接)。今天,繼續爲大家介紹如何使用前端表格控件來更新已連接的數據源信息。 環境準備 SpreadJS在線表格編輯器: SpreadJS 前端表格控件新
大家好,我是Python進階者。 一、前言 前幾天在Python白銀交流羣【上海新年人】問了一個Pandas數據分組的問題,問題如下: list1 = '電子稅票號碼 徵收稅務機關 社保經辦機構 單位編號 費種 徵收品目 徵收子目 費款所屬
背景 今天在使用redis做分佈式緩存提供自增id的時候,發現了�� t Goods_key_37的亂碼問題;因爲存的是Long,然後我就自定義了一個RedisTemplate<string,long>的實例來使用 解決過程 1.剛開始說
本文分享自華爲雲社區《10分鐘搞懂各種內存溢出案例!!(含完整源碼,建議收藏)》,作者:冰 河。 作爲程序員,多多少少都會遇到一些內存溢出的場景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個假程序員!哈哈,開個玩笑。今天,我
作者:天空小小 爲啥要寫? 從我接觸spring事務開始,就覺得這個東西很神奇,感覺實現很混亂,總是各種新的用法層出不窮。雖然懵懵懂懂的覺
這個其實是一個特別高頻的面試題,松哥也一直很想和大家仔細來聊一聊這個話題,網上關於這塊的文章很多,但是我一直覺得要把這個問題講清楚還有點難度,今天我來試一試,看能不能和小夥伴們把這個問題梳理清楚,當然,如果小夥伴們覺得看文章不過癮,松哥也有
分享8個開箱即用的API,方便日常處理集合。 1. 快速過濾空值:Stream.ofNullable 該方法是在 Java 9 中引入的,有助於過濾集合中的所有空值,從而可能使我們避免空指針異常。 在下面的示例中,有一個包含 null 的L
一、背景 在日常部門OpsReview過程中,部門內多次遇到應用容器所在的宿主機磁盤繁忙導致的接口響應緩慢,TP99增高等影響服務性能的問題,其中比較有效的解決方案是開啓日誌的異步打印,可以有效避免同步日誌打印在磁盤IO高起的情況下拖慢業
本文分享自華爲雲社區《【MySQL技術專欄】MySQL8.0直方圖介紹》,作者:GaussDB 數據庫。 背景 數據庫查詢優化器負責將SQL查詢轉換爲儘可能高效的執行計劃,但因爲數據環境不斷變化導致優化器對查詢數據瞭解的不夠充足,可能無法
var obj = {} var texts = 'hello' let ipt = document.querySelector('#input') let txt = document.querySelector(
在渲染三維地圖的時候,經常會碰到模型頂點的座標特別大,而且有多個小數點精度。當相機距離模型很近的時候,模型會抖動的很厲害,但是當相機距離模型比較遠的時候抖動的情況會有所好轉。這是什麼原因呢? 在web墨卡託座標系中,一個頂點
三維開發中,數據從內存上傳到shader是一個性能瓶頸點,如果有大量數據上傳,對性能的影響很大。把數據壓縮然後上傳,在shader端解壓,是一種性能優化方案。比如有一個頂點位置(x,y,z), 可以把這頂點的三個分量的值壓縮到一個float