2012-03-22
Excel VBA: Remove Empty rows
Remove active cell empty rows
------------------------------------
Sub RemoveEmptyRows()
Dim R As Range
Set R = Application.ActiveCell
Columns(R.Column).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
2012-03-15
CentOS 6 install VMware Tools
# cd /mnt
[mnt]# mkdir cdrom
[mnt]# mount /dev/cdrom /mnt/cdrom
[mnt]# cp /mnt/cdrom/VMwareTools-8.8.2-590212.tar.gz /tmp
[mnt]# cd /tmp
[tmp]# tar zxvf VMwareTools-8.8.2-590212.tar.gz
[tmp]# cd vmware-tools-distrib/
[vmware-tools-distrib]# ./vmware-install.pl
安裝完成後可用下面指令更改設定:
vmware-config-tools.pl
[mnt]# mkdir cdrom
[mnt]# mount /dev/cdrom /mnt/cdrom
[mnt]# cp /mnt/cdrom/VMwareTools-8.8.2-590212.tar.gz /tmp
[mnt]# cd /tmp
[tmp]# tar zxvf VMwareTools-8.8.2-590212.tar.gz
[tmp]# cd vmware-tools-distrib/
[vmware-tools-distrib]# ./vmware-install.pl
安裝完成後可用下面指令更改設定:
vmware-config-tools.pl
2012-03-11
Get Method Name
取得目前執行的函數名稱using System.Diagnostics;
// get call stack
StackTrace stackTrace = new System.Diagnostics.StackTrace(); // get calling method name Debug.WriteLine(stackTrace.GetFrame(1).GetMethod().Name); Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.Name); Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name);
偵測到 ContextSwitchDeadlock
程式用迴圈長時間處理Excel 檔結果出現以下訊息。
偵測到 ContextSwitchDeadlock
---
CLR 在過去 60 秒一直無法從 COM 內容 0x16ce00 轉換為 COM 內容 0x16cbd8。擁有該目的內容/Apartment 的執行緒,很可能正在進行非提取等候或正在處理非常長的執行作業,而未提取 Windows 訊息。這種情況通常會對效能產生負面影響,甚至可能導致應用程式停止回應,或導致記憶體使用量持續隨時間而累積。若要避免這個問題,所有單一執行緒的 Apartment (STA) 執行緒都應該使用提取等候基本方法 (例如 CoWaitForMultipleHandles),並且在長時間的執行作業中定期提取訊息。
這個訊息只會在偵錯時出現,發佈的後並不會有,所以可以按繼績不理會。
如果確定程式沒有錯誤,又不想讓它顯示,可以透過以下選項取消讓它不顯示。
Debug -> Exceptions -> Managed Debug Assistants 去掉ContextSwitchDeadlock的勾選
偵錯 -> 例外狀況 -> Managed Debug Assistants 去掉 ContextSwitchDeadlock 的撙回項目勾選
偵測到 ContextSwitchDeadlock
---
CLR 在過去 60 秒一直無法從 COM 內容 0x16ce00 轉換為 COM 內容 0x16cbd8。擁有該目的內容/Apartment 的執行緒,很可能正在進行非提取等候或正在處理非常長的執行作業,而未提取 Windows 訊息。這種情況通常會對效能產生負面影響,甚至可能導致應用程式停止回應,或導致記憶體使用量持續隨時間而累積。若要避免這個問題,所有單一執行緒的 Apartment (STA) 執行緒都應該使用提取等候基本方法 (例如 CoWaitForMultipleHandles),並且在長時間的執行作業中定期提取訊息。
這個訊息只會在偵錯時出現,發佈的後並不會有,所以可以按繼績不理會。
如果確定程式沒有錯誤,又不想讓它顯示,可以透過以下選項取消讓它不顯示。
Debug -> Exceptions -> Managed Debug Assistants 去掉ContextSwitchDeadlock的勾選
偵錯 -> 例外狀況 -> Managed Debug Assistants 去掉 ContextSwitchDeadlock 的撙回項目勾選
VSTO Excel Copy row to another worksheet
//複製資料 Excel.Range srcRange = wsSrc.Rows[target.Row] as Excel.Range; Excel.Range destRange = wsDest.Rows[dest.Row] as Excel.Range; destRange.Value2 = srcRange.Value2;
//複製無formulas Object template = Settings.Default.TemplatePath; Workbook wb = Globals.ThisAddIn.Application.Workbooks.Add(template) as Workbook; Excel.Range r = (Excel.Range)wb.Application.ActiveCell[1, "A"]; const int xlShiftDown = -4121; Excel.Range oRow = r.EntireRow; oRow.Insert(xlShiftDown, Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);
//複製有formulas Object template = Settings.Default.TemplatePath; Excel.Workbook wb = Globals.ThisAddIn.Application.Workbooks.Add(template) as Excel.Workbook; Excel.Range r = (Excel.Range)wb.Application.ActiveCell[1, "A"]; Excel.Range oRow = r.EntireRow; oRow.Select(); oRow.Copy(); Excel.Range rg = (Excel.Range)rg[2, "A"]; rg.Select(); rg.PasteSpecial(Excel.XlPasteType.xlPasteAll, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, Type.Missing, Type.Missing); wb.Application.CutCopyMode = Excel.XlCutCopyMode.xlCopy;
2012-03-10
Excel.Range To Array, Array To Excel.Range
Range to Array
private void btnRange2Array_Click(object sender, EventArgs e)
{
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
Excel.Range r = ws.get_Range("A1", "B3");
System.Array arr = (System.Array)r.Value2;
string[] ar= new string[arr.Length];
int i = ar.GetLowerBound(0);
foreach (var item in arr)
ar[i++] = item!=null? item.ToString():String.Empty;
txtResults.Text = String.Join(",", ar);
}
Array to Range
private void btnArray2Range_Click(object sender, EventArgs e)
{
string[,] arr = new string[,] { {"AA", "BB"}, {null,"DD"},{"EE","FF"}};
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
Excel.Range r = ws.get_Range("A1", "B3");
r.Value2 = arr;
}
private void btnRange2Array_Click(object sender, EventArgs e)
{
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
Excel.Range r = ws.get_Range("A1", "B3");
System.Array arr = (System.Array)r.Value2;
string[] ar= new string[arr.Length];
int i = ar.GetLowerBound(0);
foreach (var item in arr)
ar[i++] = item!=null? item.ToString():String.Empty;
txtResults.Text = String.Join(",", ar);
}
Array to Range
private void btnArray2Range_Click(object sender, EventArgs e)
{
string[,] arr = new string[,] { {"AA", "BB"}, {null,"DD"},{"EE","FF"}};
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
Excel.Range r = ws.get_Range("A1", "B3");
r.Value2 = arr;
}
enum to string
VSTO 的 Excel有個 XlCellType 如同下面的定義:
public enum XlCellType
{
xlLastCell,
xlBlanks,
.... ,
.... 以下省略
}
我想要將它轉成字串並加入控制項中。
所以透過下面的方法可以達成我要的轉換,下面的語法中 cbCellType 是 DropDownList( WinForm 用 ComboBox).
cbCellType.Items.Clear();
// Conversion from Enum to String
foreach (string item in Enum.GetNames(typeof(Excel.XlCellType)))
cbCellType.Items.Add(item);
enum轉換字串的程式碼是:
string name= Enum.GetName(typeof(Excel.XlCellType),
XlCellType.xlLastCell );
那你現在如果有一個 enum 的字串叫 "xlLastCell" 我想要將它轉成 Enum 值,則可以使用以下方法將它轉換成 Enum。
// Conversion from String to Enum
Excel.XlCellType celltype = (XlCellType)Enum.Parse(typeof(XlCellType), "xlLastCell");
2012-03-01
英文 星期
常用的星期英文縮寫:
星期一:Mon.=Monday
星期二:Tues.=Tuesday
星期三:Wed.=Wednesday
星期四:Thur.=Thurday
星期五:Fri.=Friday
星期六:Sat.=Saturday
星期天:Sun.=Sunday英語日期中的大寫、縮寫
英文 十二個月
一月Jan. January
二月Feb. February
三月Mar. March
四月Apr. April
五月May. May
六月June. June
七月July. July
八月Aug. Aguest
九月Sept. September
十月Oct. October
十一月Nov. November
十二月Dec. December
縮寫:正規的英語中六月、七月不縮寫,九月的縮寫是4個字母,其他月份3個字母。
January--1月
在羅馬傳說中,有一位名叫January的守護神,生有先後兩副臉,一副回顧過去,一副要眺望未來。人們認為選擇他的名字作為除舊迎新的第一個月月名,很有意義。英語January,便是由這位守護神的拉丁文名字January演變而來的。
February--2月
每年2 月初,羅馬人民都要殺牲飲酒,歡慶菲勃盧姆節。這一天,人們常用一種牛、草製成的名叫Februa的鞭子,抽打不育的婦女,以求懷孕生子。這一天,人們還要懺悔自己過去一年的罪過,洗刷自己的靈魂,求得神明的饒恕,使自己成為一個貞潔的人。英語2月February,便是由拉丁文Februar-ius (即菲勃盧姆節)演變而來。
March---3月
3月,原是羅馬舊曆法的1 月,新年的開始。凱撒大帝改革曆法後,原來的1月變成3月,但羅馬人仍然把3 月看做是一年的開始。另外,按照傳統習慣,3月是每年出征远战的季節。為了紀念戰神瑪爾斯,人們便把這位戰神的拉丁名字作為3月的月名。英語3月March,便是由這位戰神的名字演變而來的。
April--4月
羅馬的4月,正是大地回春.鮮花初綻的美好季節。英文4月April便由拉丁文April(即開花的日子)演變而來。
May--5月
羅馬神話中的女神瑪雅,專門司管春天和生命。為了紀念這位女神,羅馬人便用她的名字--拉丁文Maius命名5月,英文5月May便由這位女神的名字演變而來。
June--6月
羅馬神話中的Junius,是眾神之王,又是司管生育和保護婦女的神。古羅馬對她十分崇敬,便把6月奉獻給她,以她的名字--拉丁文Junius來命名6 月。英語6月June便由這位女神的名字演變而來。也有學者認為,Junius可能是古代拉丁家族中一個顯赫貴族的姓氏。
July--7月
羅馬統治者Julius Caesar被刺死後,著名的羅馬將軍馬克·安東尼建議將凱撒大帝誕生的7月,用凱撒的名字--拉丁文Julius(即朱里斯)命名之。這一建議得到了元老院的通過。英語7月July由此演變而來。
August--8月
Julius Caesar死後,由他的甥孫屋大維續任羅馬皇帝。為了和凱撒齊名,他也想用自己的名字來命名一個月份。他的生日在9月,但他選定8月。因為他登基後,羅馬元老院在8 月授予他Augustus(奧古斯都)的尊號。於是,他決定用這個尊號來命名8月。原來8月比7月少一天,為了和凱撒平起平坐,他又決定從2月中抽出一天加在8月上。從此,2月便少了一天。英語8月August便由這位皇帝的拉丁語尊號演變而來。
September--9月
老曆法的7月,正是凱撒大帝改革曆法後的9月,拉丁文Septem是"7"月的意思。雖然曆法改革了,但人們仍襲用舊名稱來稱呼9月。英語9月September便由此演變而來。
October--10月
英語10月,來自拉丁文Octo,即"8"的意思。它和上面講的9月一樣,曆法改了,稱呼仍然沿用未變。
November--11月
羅馬皇帝奧古斯都和凱撒都有了自己名字命名的月份,羅馬市民和元老院要求當時的羅馬皇帝梯比里烏斯用其名命名11月。但梯比里烏斯沒有同意,他明智地對大家說,如果羅馬每個皇帝都用自己的名字來命名月份,那麼出現了第13個皇帝怎麼辦?於是,11月仍然保留著舊稱Novem,即拉丁文"9"的意思。英語 11月November便由此演變而來。
December--12月
羅馬皇帝琉西烏斯要把一年中最後一個月用他情婦的Amagonius的名字來命名,但遭但元老院的反對。於是,12月仍然沿用舊名Decem,即拉丁文"10"的意思。英語12月December,便由此演變而來。
二月Feb. February
三月Mar. March
四月Apr. April
五月May. May
六月June. June
七月July. July
八月Aug. Aguest
九月Sept. September
十月Oct. October
十一月Nov. November
十二月Dec. December
縮寫:正規的英語中六月、七月不縮寫,九月的縮寫是4個字母,其他月份3個字母。
January--1月
在羅馬傳說中,有一位名叫January的守護神,生有先後兩副臉,一副回顧過去,一副要眺望未來。人們認為選擇他的名字作為除舊迎新的第一個月月名,很有意義。英語January,便是由這位守護神的拉丁文名字January演變而來的。
February--2月
每年2 月初,羅馬人民都要殺牲飲酒,歡慶菲勃盧姆節。這一天,人們常用一種牛、草製成的名叫Februa的鞭子,抽打不育的婦女,以求懷孕生子。這一天,人們還要懺悔自己過去一年的罪過,洗刷自己的靈魂,求得神明的饒恕,使自己成為一個貞潔的人。英語2月February,便是由拉丁文Februar-ius (即菲勃盧姆節)演變而來。
March---3月
3月,原是羅馬舊曆法的1 月,新年的開始。凱撒大帝改革曆法後,原來的1月變成3月,但羅馬人仍然把3 月看做是一年的開始。另外,按照傳統習慣,3月是每年出征远战的季節。為了紀念戰神瑪爾斯,人們便把這位戰神的拉丁名字作為3月的月名。英語3月March,便是由這位戰神的名字演變而來的。
April--4月
羅馬的4月,正是大地回春.鮮花初綻的美好季節。英文4月April便由拉丁文April(即開花的日子)演變而來。
May--5月
羅馬神話中的女神瑪雅,專門司管春天和生命。為了紀念這位女神,羅馬人便用她的名字--拉丁文Maius命名5月,英文5月May便由這位女神的名字演變而來。
June--6月
羅馬神話中的Junius,是眾神之王,又是司管生育和保護婦女的神。古羅馬對她十分崇敬,便把6月奉獻給她,以她的名字--拉丁文Junius來命名6 月。英語6月June便由這位女神的名字演變而來。也有學者認為,Junius可能是古代拉丁家族中一個顯赫貴族的姓氏。
July--7月
羅馬統治者Julius Caesar被刺死後,著名的羅馬將軍馬克·安東尼建議將凱撒大帝誕生的7月,用凱撒的名字--拉丁文Julius(即朱里斯)命名之。這一建議得到了元老院的通過。英語7月July由此演變而來。
August--8月
Julius Caesar死後,由他的甥孫屋大維續任羅馬皇帝。為了和凱撒齊名,他也想用自己的名字來命名一個月份。他的生日在9月,但他選定8月。因為他登基後,羅馬元老院在8 月授予他Augustus(奧古斯都)的尊號。於是,他決定用這個尊號來命名8月。原來8月比7月少一天,為了和凱撒平起平坐,他又決定從2月中抽出一天加在8月上。從此,2月便少了一天。英語8月August便由這位皇帝的拉丁語尊號演變而來。
September--9月
老曆法的7月,正是凱撒大帝改革曆法後的9月,拉丁文Septem是"7"月的意思。雖然曆法改革了,但人們仍襲用舊名稱來稱呼9月。英語9月September便由此演變而來。
October--10月
英語10月,來自拉丁文Octo,即"8"的意思。它和上面講的9月一樣,曆法改了,稱呼仍然沿用未變。
November--11月
羅馬皇帝奧古斯都和凱撒都有了自己名字命名的月份,羅馬市民和元老院要求當時的羅馬皇帝梯比里烏斯用其名命名11月。但梯比里烏斯沒有同意,他明智地對大家說,如果羅馬每個皇帝都用自己的名字來命名月份,那麼出現了第13個皇帝怎麼辦?於是,11月仍然保留著舊稱Novem,即拉丁文"9"的意思。英語 11月November便由此演變而來。
December--12月
羅馬皇帝琉西烏斯要把一年中最後一個月用他情婦的Amagonius的名字來命名,但遭但元老院的反對。於是,12月仍然沿用舊名Decem,即拉丁文"10"的意思。英語12月December,便由此演變而來。
訂閱:
文章 (Atom)