<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3206144035238907957</id><updated>2011-07-07T21:44:59.379-07:00</updated><title type='text'>Grady's Blog</title><subtitle type='html'>Welcome! My truly friends.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gradyli.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3206144035238907957/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gradyli.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Grady</name><uri>http://www.blogger.com/profile/13231715939135745197</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3206144035238907957.post-8764470393535381196</id><published>2010-07-01T10:13:00.000-07:00</published><updated>2010-07-03T10:15:59.751-07:00</updated><title type='text'></title><content type='html'>&lt;div&gt;背景:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;大約是在三月初的時候，工作內容調整為帶領一個小團隊開發一個已經執行兩年多的專案。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;專案的目標是針對某單位的舊系統轉為.NET平台上的系統。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;由於有民國百年的問題，所以系統期望可以在十月份上線。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這三個月的專案執行，自己列出兩點可以改進的部份。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;檢討後可以改進的地方:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1. 一開始可以先確定開發項目的重要性，優先次序。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因為此專案已經拖了很長的時間，當初的開發團隊成員都已離職，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因此待補的程式數量很多。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然而我在一開始的時候，只專注在程式預計完成日期排程和工作的安排，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;忽略了應該先將所有程式依重要性排定開發的優先次序，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我一開始的想法是盡可能在截止日前完成所有項目，然而，人力上的分配，是很難達成專案目標。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;後來發現，某些作業流程是配合不同的時間才需要執行，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;所以不是每個功能都需要在十月份之前完成。這表示某些程式可以先完成，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;某些程式可以往後推。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2. 確認系統應完成及未完成的狀態。&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;前面提到，由於原團隊在兩年來已經整批換過，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;所以到底有那些程式要開發，那些已經完成，在一開始很難掌握。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;還遇到其中一個子系統，程式的部份很多沒有撰寫，但畫面已經處理好，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;而上司都以為此系統已經完成，因此過於樂觀評估進度。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;確認系統完成度的困難點是在於，要先對已完成系統重新測試，&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後有問題的部份要找出原因，這些都會佔用程式開發的時間。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;在專案剛交接的時候，應該要先確認整個系統的執行狀態，重新評估所需時間。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;到目前為止，我遇到最大的困難是人力的問題。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;由於人員的流動，新進人員訓練後，寫了一小段時間就離職。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;然後再補新進人員，要花一些時間上手，之後是否又會發生一樣的狀況?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;期望接下來的時間能把比較動要的程式先寫完。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3206144035238907957-8764470393535381196?l=gradyli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gradyli.blogspot.com/feeds/8764470393535381196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3206144035238907957&amp;postID=8764470393535381196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3206144035238907957/posts/default/8764470393535381196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3206144035238907957/posts/default/8764470393535381196'/><link rel='alternate' type='text/html' href='http://gradyli.blogspot.com/2010/07/blog-post.html' title=''/><author><name>Grady</name><uri>http://www.blogger.com/profile/13231715939135745197</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3206144035238907957.post-2071892565755353110</id><published>2010-03-15T10:35:00.000-07:00</published><updated>2010-07-03T10:37:41.734-07:00</updated><title type='text'></title><content type='html'>利用程式將資料寫入Excel已經不是第一次了，&lt;br /&gt;如果有時間，應該把這個功能寫成可重復使用的類別。&lt;br /&gt;底下是記錄使用Microsoft.Office.Interop.Excel的過程。&lt;br /&gt;&lt;br /&gt;在寫程式之前，要將Microsoft.Office.Interop.Excel加入參考。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gradyli.files.wordpress.com/2010/03/addref.png"&gt;&lt;img class="alignnone size-full wp-image-343" title="addRef" src="http://gradyli.files.wordpress.com/2010/03/addref.png" alt="" width="510" height="370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Microsoft.Office.Interop.Excel的架構是要先有Application，&lt;br /&gt;然後開啟Workbook，再使用Workbook產生Worksheet。&lt;br /&gt;Worksheet則包含Range，可以存取Cell。&lt;br /&gt;這個架構在下列的網址有更詳細的描述，&lt;br /&gt;http://msdn.microsoft.com/en-us/library/wss56bz7%28v=VS.80%29.aspx&lt;br /&gt;&lt;br /&gt;底下是範例程式，&lt;br /&gt;&lt;br /&gt;[sourcecode language="csharp"]&lt;br /&gt;using System.IO;&lt;br /&gt;using Excel = Microsoft.Office.Interop.Excel;&lt;br /&gt;using System.Reflection;&lt;br /&gt;&lt;br /&gt;string fileName = @"C:\XYZ.XLS";&lt;br /&gt;&lt;br /&gt;string[] header = { //...字串陣列 }&lt;br /&gt;string firstLineTitle = "First Line";&lt;br /&gt;string secondLineTitle = "Second Line";&lt;br /&gt;&lt;br /&gt;//設定必要的物件&lt;br /&gt;Application oXL = new Excel.Application();&lt;br /&gt;Excel.Workbook oWB;&lt;br /&gt;Excel.Worksheet oSheet;&lt;br /&gt;Excel.Range oRng;&lt;br /&gt;&lt;br /&gt;oXL.Visible = true;&lt;br /&gt;&lt;br /&gt;//產生一個Workbook物件，並加入Application&lt;br /&gt;oWB = oXL.Workbooks.Add(Missing.Value);&lt;br /&gt;&lt;br /&gt;//設定工作表&lt;br /&gt;oSheet = (Excel.Worksheet)oWB.ActiveSheet;&lt;br /&gt;&lt;br /&gt;//在工作表的特定儲存格，設定內容&lt;br /&gt;oSheet.Cells[1, 1] = firstLineTitle;&lt;br /&gt;oSheet.Cells[2, 1] = secondLineTitle;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//在特定範圍設定儲存格內容&lt;br /&gt;oSheet.get_Range("A4", "I4").Value2 = header;&lt;br /&gt;&lt;br /&gt;DataTable dt = //....取得資料表&lt;br /&gt;&lt;br /&gt;//從第五行開始，設定第一欄和第二欄的內容&lt;br /&gt;//資料是從某資料表取出&lt;br /&gt;int row = 5;&lt;br /&gt;for (int counter = 0; counter &lt; dt.Rows.Count; counter++)&lt;br /&gt;{&lt;br /&gt;    oSheet.Cells[row, 1] = dt.Rows[counter]["XYZ"].ToString();&lt;br /&gt;    oSheet.Cells[row, 2] = dt.Rows[counter]["ABC"].ToString();&lt;br /&gt;&lt;br /&gt;    row++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//設定為按照內容自動調整欄寬&lt;br /&gt;oRng = oSheet.get_Range("A5", "A" + row.ToString());&lt;br /&gt;oRng.EntireColumn.AutoFit();&lt;br /&gt;&lt;br /&gt;//設定為置中&lt;br /&gt;oRng = oSheet.get_Range("B5", "B" + row.ToString());&lt;br /&gt;oRng.EntireColumn.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//設定為讓使用者從程式的開始執行後&lt;br /&gt;//就可以操作Excel，例如另存新檔到不同路徑&lt;br /&gt;oXL.Visible = true;&lt;br /&gt;oXL.UserControl = true;&lt;br /&gt;&lt;br /&gt;//存檔&lt;br /&gt;//在這裡只設定檔案名稱(含路徑)即可&lt;br /&gt;oWB.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,&lt;br /&gt;    Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);&lt;br /&gt;&lt;br /&gt;[/sourcecode]&lt;br /&gt;&lt;br /&gt;底下是參考文件，&lt;br /&gt;1. http://support.microsoft.com/kb/302084&lt;br /&gt;2. http://msdn.microsoft.com/en-us/library/y1xatbkd%28v=VS.80%29.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3206144035238907957-2071892565755353110?l=gradyli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gradyli.blogspot.com/feeds/2071892565755353110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3206144035238907957&amp;postID=2071892565755353110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3206144035238907957/posts/default/2071892565755353110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3206144035238907957/posts/default/2071892565755353110'/><link rel='alternate' type='text/html' href='http://gradyli.blogspot.com/2010/03/excel-microsoft.html' title=''/><author><name>Grady</name><uri>http://www.blogger.com/profile/13231715939135745197</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
