:: 진공에 대해 알려주마.

Excel에서 dataGridView 붙여넣기 본문

진공/노하우

Excel에서 dataGridView 붙여넣기

하이백 2024. 8. 6. 18:53

dataGridView 컨트롤을 사용하여 프로그램을 만드는 경우 excel등에서 한 번에 많은 데이터를 붙여넣기 할 때 필요한 코드를 구현하였다. 그리고 클립보드의 저장되는 구조를 함께 설명하였으니 참고하시기 바란다.

여기에서는 텍스트 기반의 데이터를 복붙하고자 하였다. 일반 텍스트는 보이는 그대로 클립보드에 저장된다. 오피스의 엑셀의 경우는 아래에 보이는 것처럼 저장되며 이를 이용하여 dataGridView control에 붙여 넣는 방법도 구현하였다. 

 

엑셀에서 복사하기 (내용은 의미 없음)

 

위와 같이 엑셀에서 복사하기를 하면 클립보드에 아래와 같은 포멧으로 저장된다. 행간은 "\r\n"으로 구분되고 셀간의 구분은 "\t"로 정의되어 있다. 이를 텍스트 파일 처리 하듯이 처리하면 된다. 

 

데이터를 행간 구분자인 "\r\n"을 이용하여 split하고 제거 옵션을 설정하면 데이터 처리하기 쉬운 형태로 string array에 저장한다. 

행간 처리가 완료되어 문자 배열에 저장된 복붙 데이터

 

아래와 같이 저장된 배열을 사용하면 되다. 항목별 필요한 null, 특수문자등을 처리하고 셀 단위로 dgv에 저장하면 된다.

 

셀별로 구분된 데이터를 화면에 정의된 dataGridView의 cell에 저장한다.

 

전체 코드를 아래를 확인하시고 여기에서는 해당 함수를 dataGridView 컨트롤의 Key-Up event에 추가하여 눌려진 키값이 Ctrl-V인 경우 아래의 붙여넣기 함수를 실행하게 처리하면 된다. 

private void dgv_RECIPE_KeyUp(object sender, KeyEventArgs e)
{
    try
    {
        // 눌러진 키가 Ctrl-V(붙여넣기)인 경우에 실행한다.
        if (e.Control && e.KeyCode == Keys.V)
        {    
            // 
            IDataObject ClipBoardData = Clipboard.GetDataObject();
            // 
            if (ClipBoardData != null)
            {
                // Split character 선언
                char[] SplitLine = {'\r', '\n'};
                char[] SplitCell = {'\t'};

                // 클립보드에서 데이타를 가져옴.
                string ClipBdAll = (string)ClipBoardData.GetData(DataFormats.Text);

                // 읽어온 클립보드 데이터를 라인별로 구분한다.
                string[] ClipBdLine = ClipBdAll.Split(SplitLine, StringSplitOptions.RemoveEmptyEntries);

                // 데이터를 한줄씩 가져와 처리함.
                int nRow = ClipBdLine.Length;
                for(int i = 0; i < nRow; i++)
                {
                    string[] strCol = ClipBdLine[i].Split(SplitCell);

                    string sItem = strCol[0];
                    string sValue = strCol[1];
                    string sUnit = strCol[2];
                    
                    // 화면에 업데이트. 
                    dgv_RECIPE.Rows[nPos].Cells[0].Value = sItem;
                    dgv_RECIPE.Rows[nPos].Cells[1].Value = sValue;
                    dgv_RECIPE.Rows[nPos].Cells[2].Value = sUnit;
                }
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }           
}

 

'진공 > 노하우' 카테고리의 다른 글

설비 PC 제어 프로그램 관리  (0) 2024.09.27
가속, 주행, 감속 그리고 TACT  (0) 2023.11.01
MODBUS 2  (0) 2023.10.14
리부트  (0) 2023.09.23
TOOLS (Type casting and ...)  (0) 2023.08.26
Comments