2017-01-23 187 views
3

我正在为用户输入数据创建一个模板。我希望他们能够做的就是从他们的来源复制他们的数据并将其放入Cells A21-D21。一旦粘贴,他们不能删除或改变任何东西,excel只能用于打印。因为这将是一个模板,所以重新装修很好。理想情况下,用户可以直接导出到这个受保护的工作表中并完成它,但是仪器软件只需要调用excel而不是特定的数据库位置。粘贴到Excel锁定的单元格

简而言之,用户从乐器中获取数据,并将其保存为无法操作的格式,但除了连接到乐器上的任何一台计算机上都不能显示。我需要将这些数据放入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); 
     } 
    } 
} 
相关问题