반응형

C#으로 워크시트 셀에 값, 함수 넣기

 

 

1. 목표

  • 셀에 숫자, 텍스트 넣기

  • 엑셀 함수를 넣어 합계 구하기

  • 셀에 랜덤한 숫자를 넣고 합계 구하기 예제

 

2. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

namespace chapter_003
{
    class Program
    {
        static void Main(string[] args)
        {
            Application excelapp = new Application();
            Workbook read_wb = excelapp.Workbooks.Open(Filename: @"C:\test\1234.xlsx");
            Worksheet ws = read_wb.Worksheets.Item[1];


            Range rg1 = ws.Cells[1, 1];
            rg1.Value = "abcd";

            Range rg2 = ws.Cells[1, 2];                       
            rg2.Formula = "=sum(1,2,3,4,5)";


            Console.WriteLine(rg1.Value);
            Console.WriteLine(rg2.Value);


            Console.WriteLine(rg1.Value);


            //예제 만들기
            Worksheet ws2 = read_wb.Worksheets.Item[2];
            Random rand = new Random();

            int i;
            for (i = 1; i <= 10; i++)

            {
                Range rg3 = ws2.Cells[i, 1];
                Range rg4 = ws2.Cells[i, 2];
                Range rg5 = ws2.Cells[i, 3];


                rg3.Value = i;
                rg4.Value = DateTime.Now.ToString();
                rg5.Value = rand.Next(100);

                Marshal.ReleaseComObject(rg3);
                Marshal.ReleaseComObject(rg4);
                Marshal.ReleaseComObject(rg5);
            }
            
            Range rg6 = ws2.Range[ws2.Cells[i + 1, 1], ws2.Cells[i + 1, 2]];
            Range rg7 = ws2.Cells[i + 1, 3];

            rg6.Value = "Total";
            rg7.Formula = "=sum(c1:c10)";


            read_wb.Save();
            read_wb.Close();
            excelapp.Quit();
            Marshal.ReleaseComObject(rg1);
            Marshal.ReleaseComObject(rg2);
            Marshal.ReleaseComObject(rg6);
            Marshal.ReleaseComObject(rg7);
            Marshal.ReleaseComObject(ws);
            Marshal.ReleaseComObject(ws2);
            Marshal.ReleaseComObject(read_wb);
            Marshal.ReleaseComObject(excelapp);
        }
    }
}

 

 

3. 뜯어 보기

Range rg1 = ws.Cells[1, 1];
rg1.Value = "abcd";
  • rg1에 1,1(엑셀 셀 주소로는 A1)을 할당한다.

  • rg1.value로 셀의 내용을 추가한다. (숫자, 텍스트 등... )

  • rg1.value에 함수 값을 그냥 넣을 경우 함수 계산이 제대로 되지 않는다.

Range rg2 = ws.Cells[1, 2];                       
rg2.Formula = "=sum(1,2,3,4,5)";
  • rg2.Formula를 이용하여 셀에 함수값을 넣는다.

  • C#과 무관한 엑셀 함수를 넣어야 계산이 된다.

Worksheet ws2 = read_wb.Worksheets.Item[2];
Random rand = new Random();

int i;
for (i = 1; i <= 10; i++)
{
    Range rg3 = ws2.Cells[i, 1];
    Range rg4 = ws2.Cells[i, 2];
    Range rg5 = ws2.Cells[i, 3];


    rg3.Value = i;
    rg4.Value = DateTime.Now.ToString();
    rg5.Value = rand.Next(100);

    Marshal.ReleaseComObject(rg3);
    Marshal.ReleaseComObject(rg4);
    Marshal.ReleaseComObject(rg5);
}

Range rg6 = ws2.Range[ws2.Cells[i + 1, 1], ws2.Cells[i + 1, 2]];
Range rg7 = ws2.Cells[i + 1, 3];

rg6.Value = "Total";
rg7.Formula = "=sum(c1:c10)";
  • 2번째 워크시트(read_wb.Worksheets.Item[2])에 현재 시간값과 난수를 이용하여 예제를 만든다.

  • rg3, rg4, rg5는 1,2,3열에 각각 번호, 현재 시각, 0부터 100까지의 난수를 입력한다.

  • rg6, rg7을 이용하여 "Total"텍스트 입력과 3열의 값 합계를 계산하는 엑셀 함수를 작성한다.

반응형

+ Recent posts