当我以.NET 3.5为目标时,我有以下一些代码可以正常工作:
Microsoft.Office.Interop.Excel.Application _excelInstance;
Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet;
Microsoft.Office.Interop.Excel.Workbook _excelWorkbook;
_excelInstance = new Microsoft.Office.Interop.Excel.Application();
_excelWorkbook = _excelInstance.Workbooks.Add();
_excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1);
Run Code Online (Sandbox Code Playgroud)
但是,当我以.NET 4.5为目标时,编译器会为上一行提供以下错误:
无法找到编译动态表达式所需的一种或多种类型.你错过了参考吗?
我无法为此项目定位.NET 3.5,它必须是4.0或4.5.
知道会导致这种情况的原因,或者我应该如何解决这个问题?
谢谢.
编辑 -
以下是有趣的课程:
public class ExcelWriter : IDisposable
{
private string _outputFile;
public ExcelWriter(string outputFile)
{
_outputFile = outputFile;
}
public void Write(List<string[]> data)
{
Microsoft.Office.Interop.Excel.Application _excelInstance;
Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet;
Microsoft.Office.Interop.Excel.Workbook _excelWorkbook;
_excelInstance = new Microsoft.Office.Interop.Excel.Application();
_excelWorkbook = _excelInstance.Workbooks.Add();
_excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1);
int rowNumber = 1;
foreach (var row in data)
{
int columnNumber = 1;
foreach (var field in row)
{
_excelWorksheet.Cells[rowNumber, columnNumber] = field;
columnNumber++;
}
rowNumber++;
}
if (File.Exists(_outputFile))
{
File.Delete(_outputFile);
}
_excelWorkbook.SaveAs(_outputFile);
_excelWorkbook.Close();
_excelInstance.Quit();
}
public void Dispose()
{
if (File.Exists(_outputFile))
{
File.Delete(_outputFile);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 12
是的,当您以.NET 4.0及更高版本为目标添加对Microsoft.Office.Interop.Excel互操作程序集的引用时,Excel类型库的转换方式会有所不同.它将利用添加的动态关键字.在Office互操作中有很多用途,它是一个在许多地方返回"变体"的对象模型.以前他们被翻译成对象,现在变为动态.
这需要一个不属于您的项目的框架程序集.可能是因为您从之前的VS版本转换了它.
右键单击项目的"引用"节点"添加引用",选择"Microsoft.CSharp".
| 归档时间: |
|
| 查看次数: |
7150 次 |
| 最近记录: |