2017-01-23 9 views
3

사용자가 데이터를 입력 할 템플릿을 만듭니다. 내가 할 수 있기를 원하는 것은 출처의 데이터를 복사하여 셀 A21-D21에 넣는 것뿐입니다. 붙여 넣기 후에는 아무 것도 삭제하거나 변경할 수 없으며 Excel은 인쇄 할 수있는 용도로만 사용됩니다. 이것이 템플릿 일 것이기 때문에 다시 채우는 것은 괜찮습니다. 이상적으로 사용자는이 보호 된 워크 시트에 직접 내보내고 작업을 완료하지만 악기 소프트웨어는 특정 데이터베이스 위치가 아니라 Excel을 호출하는 것이 좋습니다.Excel 잠긴 셀에 붙여 넣기

즉, 사용자는 계측기에서 데이터를 가져 와서 조작 할 수없는 형식으로 저장되지만 계측기에 연결된 항목을 제외한 모든 컴퓨터에 표시 할 수 없습니다. 이 데이터는 Excel에 저장해야하지만 변경할 수는 없습니다. 감사인은 원할 경우 Raw 데이터를 Excel과 비교할 수 있습니다.

워크 시트를 보호하고 잠금 해제 된 셀 (셀 서식), A1을 선택한 다음 A21-D21의 전체 범위를 채우거나 붙여 넣는 방법이 있습니까?

사람들은 원시 데이터를 조작하여 원하는 답을 얻지 만 사용자가 붙여 넣기 만하도록 제한합니다.

간단히 말해서 사용자가 복사/붙여 넣기를 할 수있는 방법을 찾고 싶습니다. ?

답변

0

Excel에서 원하는 것을 수행 할 수있는 방법이 있는지 모르지만 프로그래밍 방식으로 수행 할 수 있습니다.

// Note: need to add reference to Microsoft.Office.Interop.Excel to get these namespaces 
// In Visual Studio, choose Project > Add Reference > COM > Type Libraries > 
// Microsoft Excel 16.0 Object Library 
using Microsoft.Office.Interop.Excel; 
using System.Collections.Generic; 
using System.Runtime.InteropServices; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string fileName = @"c:\users\eric.sundquist\desktop\book1.xlsx"; 
      int worksheetNumber = 1; 
      List<string> contents = new List<string> { "1", "2", "3", "4" }; 

      PasteIntoProtectedSheet(fileName, worksheetNumber, contents); 
     } 

     static void PasteIntoProtectedSheet(string fileName, int worksheetNumber, 
       List<string> contents) 
     { 
      Application excel = new Application(); 
      Workbook workbook = excel.Workbooks.Open(fileName); 

      workbook.Sheets[worksheetNumber].Unprotect(); 
       // Can pass in password as parameter if needed 

      Range range = workbook.Sheets[1].Range("A21:D21"); 

      for (int column = 0; column < contents.Count; column++) 
      { 
       range.Cells[1, column + 1] = contents[column]; 
      } 

      workbook.Sheets[worksheetNumber].Protect(); 

      workbook.Save(); 
      workbook.Close(); 
      Marshal.ReleaseComObject(range); 
      Marshal.ReleaseComObject(workbook); 
      Marshal.ReleaseComObject(excel); 
     } 
    } 
}