我有成千上万的Excel文件,都是用同一个模板制作的。每个都有参数列,如日期,部件号和工程师。工程师单元格设置为下拉列表,因此用户只能输入某些工程师的名称。当我们想要添加新工程师或摆脱已离开的工程师时,我们目前根据需要更改Microsoft脚本编辑器中的名称列表:
<x:DataValidation>
<x:Range>$D$19:$D$37</x:Range>
<x:Type>List</x:Type>
<x:CellRangeList/>
**<x:Value>"Peter, Paul, Mary"</x:Value>**
</x:DataValidation>
每当我们遇到Excel文件时,我们都暂时没有更新,我们必须按ctrl + F11,找到“Peter,Paul,Mary”的行并手动将其更改为“Peter,John,Susan ”。这非常烦人,我想编辑上面的数据,用“彼得,约翰,苏珊”取代“彼得,保罗,玛丽”。我想为每个文件名以“ABC”结尾的Excel文件执行此操作。是否有针对此的代码解决方案而不是搜索每个文件并手动更改它?我更喜欢C ++ / C#,但如果我需要或者如果它更容易,可以使用Visual Basic进行管理。
答案 0 :(得分:0)
我建议您查看以下链接:
<强> ExcelPackage 强>
这是一个开源库,您可以使用操作excelsheets ,您可以创建,加载使用此库,em>和保存 excel表。
你说你确实最喜欢c++
或c#
,图书馆位于c#
,所以这很容易。
以下链接指导您阅读解释如何使用它的教程:
<强> ExcelPackage tutorial 强>
当我在网上搜索c#的excel库时,我找到了以下页面:
<强> Edit Excel files using c# 强>
这是一个关于如何修改现有Excel工作表的完整教程,我将向您推荐。
答案 1 :(得分:0)
您可以使用COM互操作完成所有这些操作。确保您的项目引用了Excel互操作。 (我相信你的机器上需要安装excel)
using System.IO;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
然后是应用
class Program
{
static void Main(string[] args)
{
var mypath = @"c:\my\search\directory";
string[] files = Directory.GetFiles(mypath, "*abc.xls", SearchOption.AllDirectories);
foreach (var file in files)
{
Find(Path.Combine(mypath,file));
}
}
private static void Find(string path)
{
object missing = null;
Excel.Range currentFind = null;
Excel.Range firstFind = null;
var app = new Excel.Application();
app.Visible = true;
Excel.Workbook workbook = app.Workbooks.Open(path, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
var worksheet = workbook.Sheets[1];
Excel.Range foundNames = worksheet.Range["A1", "B3"];
// You should specify all these parameters every time you call this method,
// since they can be overridden in the user interface.
currentFind = foundNames.Find("Peter, Paul, Mary", LookIn: XlFindLookIn.xlValues, LookAt: XlLookAt.xlPart);
currentFind.Replace(What:"Peter, Paul, Mary", Replacement:"Peter, John, Susan");
workbook.Save();
}
}
此示例假定所有内容都在A1和B3中的第一个工作表上。显然,您的工作表将有所不同,因此需要更改这些值以反映这一点。 此外,您可以删除“visible = true”,可能会加快速度。我只是这样做,以便我可以看到我的应用程序正在做什么。