2012-08-21

Excel VBA- Set Field Color

ColorIndex 用來設定 Excel 欄位的背景顏色
設定方式


Cells(1, 1).Interior.ColorIndex = 1




顯示顏色索引


Public Sub ShowColorIndex()
    Dim ColorIndex As Long
    Dim i As Long
    Cells(1, 1).Value2 = "Index"
    Cells(1, 2).Value2 = "Color"
    i = 2
    For ColorIndex = 1 To 56
        Cells(i, 1).Value2 = ColorIndex
        Cells(i, 2).Interior.ColorIndex = ColorIndex
        i = i + 1
    Next
End Sub

2012-07-13

JsonToString


jsonToString: 


function jsonToString(obj){
  var THIS = this; 
  switch(typeof(obj)){
    case 'string': return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';
    case 'array': return '[' + obj.map(THIS.jsonToString).join(',') + ']';
    case 'object':
      if(obj instanceof Array){
        var strArr = [];
        var len = obj.length;
        for(var i=0; i<len; i++){
         strArr.push(THIS.jsonToString(obj[i]));
        }
        return '[' + strArr.join(',') + ']';
     }else if(obj==null){
       return 'null';

     }else{
       var string = [];
       for (var property in obj) 
         string.push(THIS.jsonToString(property) + ':' 
            + THIS.jsonToString(obj[property]));
       return '{' + string.join(',') + '}';
     }
   case 'number': return obj;
   case false: return obj;
   }
}

2012-06-26

Transactions with a datacontext

1. Transaction

dataContext.Connection.Open();
using (datacontext.Transaction = dataContext.Connection.BeginTransaction())
{
    dataContext.SubmitChanges();

    if (allOK)
    {
        datacontext.Transaction.Commit();
    }
    else
    {
        datacontext.Transaction.RollBack();
    }
}


2.TransactionScope

try
{
    using (TransactionScope scope = new TransactionScope())
    {
        //Do some stuff

        //Submit changes, use ConflictMode to specify what to do
        context.SubmitChanges(ConflictMode.ContinueOnConflict);

        scope.Complete();
    }
}
catch (ChangeConflictException cce)
{
        //Exception, as the scope was not completed it will rollback
}



2012-04-14

CentOS

Check CentOS Version

cat /etc/*release*
or
$ cat /etc/redhat-release

install httpd
$ yum install httpd




Accept port 80
vi /etc/sysconfig/iptables
add line into iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
restart iptables
service iptables restart

2012-04-03

常用軟體工具 Software & Tools

Virtual Machine
VirtualBox
VMware Player VMware 的免費產品,從4.0版開始可以建立自已的虛擬機喔


SSH Client
PieTTY Free telnet/ssh client
PuTTY Free telnet/ssh client
WinSCP Open source SFTP/SCP/FTPS/FTP Client for windows




Microsoft Visual Studio
MSBuildShellExtension Build Visual Studio solutions and projects from Windows Explorer.
Git Source Control Provider 在方案總管操作 GIT 版本控制的擴充功能

Version Control System
Apache Subversion Open source version control system.
TortoiseSVN Windows Shell Extension for Subversion
Git The fast version control system.
msysgit Git for Windows
TortoiseGit Git Version of TortoiseSVN.

Browser
Google Chrome
Firefox
Safari Safari-zh-cht
IE IE-zh-TW

Chrome Extension


DNS
Dual DHCP DNS Server


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

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 的撙回項目勾選

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;
        }


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,便由此演變而來。

尊重、包容、體諒、信任。

adsense