代码改变世界

C# Save Picture to Excel

2011-03-17 14:47  focusdada  阅读(386)  评论(0)    收藏  举报
1 private static void SavePictureToExcel(string siteName)
2 {
3 string dirFolder = Environment.CurrentDirectory.ToString();
4 string excelFileName = Path.Combine(dirFolder,siteName + "-" + GetMonthString(DateTime.Now.Month) + ".xlsx");
5 object m_objOpt = System.Reflection.Missing.Value;
6
7 using (new ChangeLocaleHelper("en-us"))
8 {
9 ApplicationClass application = new Microsoft.Office.Interop.Excel.ApplicationClass();
10 try
11 {
12 application.DisplayAlerts = false;
13 application.Visible = false;
14 Workbooks workbooks = application.Workbooks;
15 Dictionary<string, string> pageUrls = GetPageUrls(siteName);
16 string[] keys = pageUrls.Keys.ToArray();
17 int keyCount = keys.Length;
18 Workbook workbook = workbooks.Add(true);
19 Sheets worksheets = workbook.Sheets;
20
21 worksheets.Add(m_objOpt, m_objOpt, keyCount-1, m_objOpt);
22 for(int i=0;i<keyCount;i++)
23 {
24 (workbook.Sheets[i+1] as Worksheet).Activate();
25 Worksheet worksheet = workbook.ActiveSheet as Worksheet;
26 worksheet.Name = keys[i].ToString();
27 Range range = worksheet.get_Range("A1", "A1");
28 range.Select();
29 string picPath = Path.Combine(dirFolder, keys[i] + ".png");
30 worksheet.Shapes.AddPicture(picPath, MsoTriState.msoFalse,
31 MsoTriState.msoTrue, 0, 0, -1, -1);
32 }
33 (workbook.Sheets[1] as Worksheet).Activate();
34 workbook.SaveAs(excelFileName, m_objOpt,
35 m_objOpt, m_objOpt, m_objOpt, true, XlSaveAsAccessMode.xlNoChange,
36 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
37 workbook.Close(true, m_objOpt, m_objOpt);
38 }
39 finally
40 {
41 application.Quit();
42 }
43 }
44 }
45 class ChangeLocaleHelper : IDisposable
46 {
47 private string _localeName;
48 private string _originalLocale;
49 public ChangeLocaleHelper(string localeName)
50 {
51 this._localeName = localeName;
52 _originalLocale = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
53 System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(this._localeName);
54 }
55
56 #region IDisposable Members
57 public void Dispose()
58 {
59 System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(this._originalLocale);
60 }
61 #endregion
62 }
63 private static string GetMonthString(int i)
64 {
65 switch (i)
66 {
67 case 1:return "January";
68 case 2: return "Febuary";
69 case 3: return "March";
70 case 4: return "April";
71 case 5: return "May";
72 case 6: return "June";
73 case 7: return "July";
74 case 8: return "August";
75 case 9: return "September";
76 case 10: return "October";
77 case 11: return "November";
78 case 12: return "December";
79 default: return string.Empty;
80 }
81 }
82