我有一个 Excel 工作簿(“test.xlsx”),它有一个名为“gv_epxsize”的单元格。我的目标是打开 excel 工作簿并在名称为“gv_epxsize”的单元格中写下字符串“101”。
问题是我的代码一直将文件设为只读,因此它不会将字符串“101”写入命名单元格。我一直收到 Windows 提示,我已经使用 Windows 权限打开了该文件,并询问我是否要打开只读副本。问题是我没有打开文件,并且在我启动代码之前没有运行 EXCEL.EXE 进程。
我已经做了什么:
有人可以告诉我我在这里做错了什么吗?
这是 C# 的片段
string filePath = "C:\\Users\\ussatdafa\\Desktop\\Work\\Projects\\test.xlsx";
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
MessageBox.Show("Excel has not been properly installed");
}
else
{
//string fileName = Path.Combine(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), filePath);
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Workbooks wbs = excelApp.Workbooks;
Workbook wb = wbs.Open(filePath, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
wb.Names.Item("gv_epxsize").RefersToRange.Value = "101";
}
Run Code Online (Sandbox Code Playgroud)
老实说,我不确定发生了什么,但我有两个观察结果:
xlApp,另一个实例是excelApp。如果您在实例化时打开任务管理器,excelApp我很确定您会发现两个 Excel 实例正在运行。我不知道这是否会导致您的问题我使用这些更改运行了您的代码版本,并且在更改命名范围“gv_epxsize”的单元格值时没有遇到任何问题。
string filePath = "C:\\Users\\ussatdafa\\Desktop\\Work\\Projects\\test.xlsx";
Microsoft.Office.Interop.Excel.Application excelApp =
new Microsoft.Office.Interop.Excel.Application();
if (excelApp == null)
{
MessageBox.Show("Excel has not been properly installed");
}
else
{
excelApp.Visible = true;
Workbook wb = excelApp.Workbooks.Open(filePath, 0, false, 5, "", "", false,
XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Worksheet ws = wb.Sheets[1];
wb.Names.Item("gv_epxsize").RefersToRange.Value = "101";
}
Run Code Online (Sandbox Code Playgroud)
这对我来说完美无缺。这是证明:
所以这让我想到了几种可能性:
(Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
Run Code Online (Sandbox Code Playgroud)
不是你想的那样。或者,它与我使用的不同,它是:
Worksheet ws = wb.Sheets[1];
Run Code Online (Sandbox Code Playgroud)
这将返回第一个工作表(新工作簿上的“Sheet1”)。
当然,打开两个 Excel 可能会导致问题。
| 归档时间: |
|
| 查看次数: |
8748 次 |
| 最近记录: |