如何向使用C#Excel Interop打开的工作簿中添加宏
我使用C#开发了一个Windows服务,它处理文件夹中的许多Excel文件,以添加条件格式、调整页面布局和打印设置,并添加一个宏来调整分页符。我遇到的问题是试图在工作簿打开例程中向ThisWorkbook对象添加一行代码,以便在打开文件时自动运行宏。我用于将宏添加到模块1的代码如下:如何向使用C#Excel Interop打开的工作簿中添加宏,c#,excel-interop,C#,Excel Interop,我使用C#开发了一个Windows服务,它处理文件夹中的许多Excel文件,以添加条件格式、调整页面布局和打印设置,并添加一个宏来调整分页符。我遇到的问题是试图在工作簿打开例程中向ThisWorkbook对象添加一行代码,以便在打开文件时自动运行宏。我用于将宏添加到模块1的代码如下: using Excel = Microsoft.Office.Interop.Excel; using VBIDE = Microsoft.Vbe.Interop; VBIDE.VBCom
using Excel = Microsoft.Office.Interop.Excel;
using VBIDE = Microsoft.Vbe.Interop;
VBIDE.VBComponent oModule;
String sCode;
oModule = wb.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);
sCode =
@"Sub FixPageBreaks()
On Error GoTo ErrMsg
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim sheet As Worksheet
Set sheet = wb.Worksheets(1)
Dim vBreaks As VPageBreaks
Set vBreaks = sheet.VPageBreaks
If vBreaks.Count > 0 Then
Dim lastCol As Integer
lastCol = ActiveSheet.Cells.Find(What:=""*"", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Column
Dim lCount As Integer
lCount = 1
Dim brkCol As Integer
Dim brkRng As Range
Dim iReply As VbMsgBoxResult
Do
If vBreaks(lCount).Location.Column = lastCol Then
brkCol = vBreaks(lCount).Location.Column + 1
Else
brkCol = vBreaks(lCount).Location.Column - 1
End If
Set brkRng = Range(sheet.Cells(1, brkCol), sheet.Cells(1, brkCol))
If brkCol Mod 2 = 1 And lastCol > brkCol Then
Set vBreaks(lCount).Location = brkRng
ElseIf brkCol Mod 2 = 1 Then
vBreaks(lCount).DragOff Direction:=xlToRight, RegionIndex:=1
End If
lCount = lCount + 1
Loop While lCount <= vBreaks.Count
sheet.PrintPreview
End If
Exit Sub
ErrMsg:
MsgBox Err.Description
End Sub";
oModule.CodeModule.AddFromString(sCode);
wb是代码前面实例化的工作簿对象。但是,我似乎找不到太多关于vbext_ComponentType枚举的文档来确定哪个(如果有的话)代表工作簿中的ThisWorkbook对象以及如何向其中添加代码。我也很乐意找到C代码,它对分页符的处理方式与Excel文档中的宏相同。我没有像其他处理一样用C语言完成它的唯一原因是我无法让它工作。那里的任何帮助都同样有用。这里的一些解释可能会有所帮助
var workbookMainModule = wkBk.VBProject.VBComponents.Item("ThisWorkbook");
workbookMainModule.CodeModule.AddFromString(sCode);
var workbookMainModule = wkBk.VBProject.VBComponents.Item("ThisWorkbook");
workbookMainModule.CodeModule.AddFromString(sCode);