2017-01-23 6 views
3

私はユーザーにデータを入力するためのテンプレートを作成しています。私が彼らができるようにしたいのは、彼らのソースからデータをコピーし、それをCell A21-D21に入れることだけです。一度貼り付けると何も削除したり変更したりすることはできません。Excelは印刷できるようにのみ使用されます。これがテンプレートになるので、再作成は問題ありません。理想的には、ユーザーはこの保護されたワークシートに直接エクスポートして処理することができますが、計測器ソフトウェアは特定のデータベースの場所ではなくExcelを呼び出すだけです。つまり、ユーザーは楽器からデータを取得し、操作できない形式で保存されますが、楽器に接続されているものを除いてどのコンピュータにも表示することはできません。私はこのデータをExcelに入れる必要がありますが、変更することはできません。監査担当者は、Rawデータを選択すればExcelと比較することができます。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); 
     } 
    } 
} 
関連する問題