2011-09-27 118 views
2

我有一個Excel文件(.xlsm),裏面有一個宏。我想將這個Excel文件上傳到服務器上,讓C#執行它而不是VBA宏。這個宏看起來很簡單,但我不太瞭解它將其轉換爲C#。下面是宏代碼:將Excel宏轉換爲C#?

Sub publishpages() 

    'calculate how many iterations 
    x = 0 
    Sheets("pagegen").Select 
    Range("n1").Select 
    Range("n1").Copy 
    numberOfPages = ActiveCell.Value 

    'step through and select each sample 
    For x = 0 To numberOfPages 

     Sheets("listsample").Select 
     Range("A2").Select 
     ActiveCell.Offset(x, 0).Range("A1").Select 
     Selection.Copy 
     Sheets("pagegen").Select 
     Range("l1").Select 
     ActiveSheet.Paste 

     'name folder and filename 
     Sheets("pagegen").Select 
     Range("ac2").Select 
     Range("ac2").Copy 
     foldername = ActiveCell.Value 

     'publish pages 
     Range("d3:q80").Select 
     Application.CutCopyMode = False 
     Selection.Copy 
     ActiveWorkbook.PublishObjects.Add(xlSourceRange, "C:\Temp\" & foldername, "pagegen", "$d$3:$q$80", xlHtmlStatic, "sampleweb11 current_22", "").Publish (True) 

    Next x 

End Sub 

因爲我計劃在一臺服務器上運行此,我要尋找一個託管庫,所以我沒有在服務器上安裝Office。這就是我正在看的,它甚至支持Linq:http://epplus.codeplex.com

有關如何啓動它的任何想法?

+0

考慮使用VB.NET,因爲它處理_Office.Interop_好得多。而不是使用'.Select','.Copy'和'.Paste'命令的剪貼板考慮使用直接賦值('Range [xx] .Value2 = Range [yy] .Value2') – ja72

+0

重構肯定會有幫助代碼轉換)。你可以發佈重構版本作爲你的答案,我會接受。這會幫助我理解這是在做什麼。 – TruMan1

回答

1

這裏是重構的代碼:

Option Explicit 
Sub publishpages() 
    Dim x As Long, numberOfPages As Long 
    Dim folderName As String 
    numberOfPages = Sheets("pagegen").Range("n1").Value 

    For x = 0 To numberOfPages 
     Sheets("pagegen").Range("l1") = Sheets("listsample").Range("A2").Offset(x, 0).Range("A1") 
     folderName = Sheets("pagegen").Range("ac2") 
     ActiveWorkbook.PublishObjects.Add(xlSourceRange, "C:\Temp\" & folderName, "pagegen", "$d$3:$q$80", xlHtmlStatic, "sampleweb11 current_22", "").Publish (True) 
    Next x 
End Sub