我的excel里面有个自定义的宏,所以保存的是xlsm格式,很简单,A1单元格的值变化后,B1值也就变化。
我打开excel手动写入时,一切正常,使用epplus写就不会触发这个宏,请问有没有大神知道是怎么回事?
宏里面代码很简单:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then wwwww End If End Sub Sub wwwww() Dim a As String a = Sheet1.Range("A1").Value Sheet1.Range("B1") = a + 1 End Sub
这个是正常的。
好像说你写一个软件,定义事件触发修改数据。
Amount=quantity*UnitPrice
但是如果别人直接写你的数据库,那么他对Quantity 和UnitPrice的修改就不会导致Amount的自动修改。
你使用第三方软件写EXCEL的数据就像是第三方软件写你的数据库一样。
但是我在软件中调用“Set xlApp = CreateObject("Excel.Application")”这种写法的话,是可以自动调用宏的啊!
@明爷: 这是调用EXCEL的函数,EXCEL自己干的,就好比第三方软件不写数据库,而是调用你的API,一样你可以保证数据逻辑事件触发啥的啊。
@爱编程的大叔:
但是如果引用Excel的COM,用“ Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();”这种写法,也是有问题的,不能自动调用宏!
@爱编程的大叔:
因为Excel提供的COM在客户端总会出现稀奇古怪的兼容性问题,所以我才使用第三方的库,您有好的解决方法吗?
@明爷: 此路不通,你应该寻找其他方法的,原始需求并不一定需要使用事件来实现。
如果你无法修改EXCEL宏的话,那就当我没说。
@爱编程的大叔:
winform程序,在客户端使用office COM的时候出现各种兼容性问题,客户端操作人员也不会管什么杀毒,重装什么的,抱怨很多,所以才使用EPPLUS的,一直都用的还不错,直到这次出了这个宏的问题。
这个带宏的excel模板是已经写好了的,我们不知道里面的vba的代码,只能调用。蛋疼啊~!
@明爷: 如果是这样的话,那么在EXCEL中取数据,而不是从C#中写入数据,会是一个更好的方法。