是否可以在Excel中运行QuickBooks SDK?

问题描述 投票:0回答:2

这是一个有点抽象的问题,但我希望有人可以分享一些对此的见解,因为谷歌没有给我任何明确的答案。我的任务是在 Excel 应用程序和 QuickBooks 之间导入和导出数据,但有一些要求:

  1. 它不能使用糟糕的QuickBooks导入文件功能。我的任务是重写此功能,因为它引起了所有问题,而且据我所知,它们无论如何都已被弃用。
  2. 该过程必须从 Excel 应用程序内开始。使用其他中介技术也可以,只要可以通过按下 Excel 表单上的按钮即可完成。

这是我得到的:

[尝试#1]

我第一次尝试这个问题,我尝试在 Visual Studio 中创建 Excel 插件并添加 QuickBooks SDK 作为参考,这导致插件无法加载。我不知道到底为什么,我只是得到一个通用的“无法找到或无法加载加载项”,当您单击详细信息时,它会详细说明异常:

Could not load file or assembly 'ExcelAddIn3, Version=1.0.0.0, Culture=neutral' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)


************** Exception Text **************

System.IO.FileLoadException: Could not load file or assembly 'ExcelAddIn3, Version=1.0.0.0, Culture=neutral' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)
File name: 'ExcelAddIn3, Version=1.0.0.0, Culture=neutral'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)
   at Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.CreateEntryPoint(String entryPointTypeName)
   at Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.Microsoft.VisualStudio.Tools.Office.Runtime.Interop.IExecuteCustomization2.LoadEntryPoints(IntPtr serviceProvider)




************** Loaded Assemblies **************
mscorlib
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3221.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
Microsoft.VisualStudio.Tools.Office.Runtime
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio.Tools.Office.Runtime/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.Tools.Office.Runtime.dll
----------------------------------------
System.Core
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3221.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3190.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Configuration
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3056.0 built by: NET472REL1
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3056.0 built by: NET472REL1
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Security
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3101.0 built by: NET472REL1LAST_B
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Security/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Security.dll
----------------------------------------
Microsoft.VisualStudio.Tools.Applications.Hosting
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio.Tools.Applications.Hosting/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.Tools.Applications.Hosting.dll
----------------------------------------
Microsoft.VisualStudio.Tools.Applications.Runtime
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio.Tools.Applications.Runtime/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.Tools.Applications.Runtime.dll
----------------------------------------
System.Deployment
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3056.0 built by: NET472REL1
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Deployment/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll
----------------------------------------
Microsoft.VisualStudio.Tools.Applications.ServerDocument
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio.Tools.Applications.ServerDocument/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.Tools.Applications.ServerDocument.dll
----------------------------------------
System.Windows.Forms
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3221.0 built by: NET472REL1LAST_C
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3056.0 built by: NET472REL1
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Xml.Linq
    Assembly Version: 4.0.0.0
    Win32 Version: 4.7.3056.0 built by: NET472REL1
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml.Linq/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll
----------------------------------------
Microsoft.Office.Tools
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.Office.Tools/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.Office.Tools.dll
----------------------------------------
Microsoft.Office.Tools.Excel.Implementation
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.Office.Tools.Excel.Implementation/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.Office.Tools.Excel.Implementation.dll
----------------------------------------
Microsoft.Office.Tools.Common.Implementation
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.Office.Tools.Common.Implementation/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.Office.Tools.Common.Implementation.dll
----------------------------------------
Microsoft.Office.Tools.Common
    Assembly Version: 10.0.0.0
    Win32 Version: 10.0.60828.0
    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.Office.Tools.Common/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.Office.Tools.Common.dll
----------------------------------------

[尝试#2]

仍然尝试使用外接程序,我创建了一个引用 QBSDK 的单独的类库,并将该库添加为外接程序中的引用。同样的问题,通用错误消息说无法找到或无法加载加载项。

我真的不知道为什么,如果有人有见解,请告诉我。

[尝试#3]

我开始考虑使用 WCF 与运行 QBSDK 的单独程序进行通信。当我创建一个独立的应用程序并引用 SDK 时,它工作得很好。我可以连接到 QB 和我的应用程序并在它们之间交换数据。我从未使用过 WCF,但它给了我一些希望,即使它比我希望的复杂得多,也可以做到这一点。

我的想法是这样的:

Excel 应用程序使用自定义 Excel 加载项,该加载项使用 WCF 命名管道服务器与单独的 .NET 应用程序连接,该应用程序使用 WCF 客户端在两个端点之间发送 qbXML 数据。我什至不知道这是否可能,也不知道我会陷入什么陷阱,但是,除了认输之外,这似乎是我最好的选择。

还有其他更好的方法可以做到这一点吗?

c# excel visual-studio wcf quickbooks
2个回答
1
投票

最简单的方法是放弃为 Office 构建加载项(很痛苦 - 只是无缘无故地增加计费时间 - 导致世界各地的儿童挨饿 - 不要打扰)。

最简单的方法是在.net中构建COM对象。然后,任何支持 com 对象的软件(office、windows 脚本)都可以使用该 com 对象。

首先: 在 .net 中构建一个可工作的 COM 对象

说出这段代码:

Imports System.Runtime.InteropServices

Public Class Class1

    Function Hello()

        MsgBox("Hello World")

    End Function

End Class

除了上面的代码之外,不要再写任何东西。您不需要 Office 互操作程序集或上述 .net 项目中引用的任何其他内容。我为上面创建了一个空白的.net 类。没有额外的参考资料或任何东西。

如果你写的比上面多,那么你就到木棚后面去——如果你写的比上面多,你就是在偷窃计费时间。

在上面的VS项目中: 设置项目 x86(对于 Office x32,您必须执行此操作) 选中“注册 COM 互操作(在编译选项下)”复选框

你完成了!

现在,编译以上内容。

现在,在 excel 中的 VBA(例如测试模块)中,使用以下 VBA 代码:

Sub TestC5()

   Dim obj     As Object

   Set obj = CreateObject("ComTest5.Class1")

   obj.Hello

End Sub

以上内容适用于 Excel!!!!

好的,现在(并且只有在我们的上述两行代码在 Excel VBA 中工作之后???

现在,只需添加对 QB SDK 的引用,添加所需的属性和方法,然后就可以开始比赛了。

再次: 在添加 SDK 参考之前,让上述 2 行代码正常工作(如果您无法正常工作 - 解雇所有开发人员 - 他们不知道如何构建 COM 对象)。

只需获取一个在 .net 中工作的 COM 对象即可。您可以在 Excel、Word、Access 或任何支持 COM 接口的 Windows 程序中使用它。

我一直使用 QB SDK 执行上述操作。

我有代码可以从 Excel(或 Access)将发票方向推入 QB – 无需导出,无需导入 – 发票直接进入 QuickBooks,无需任何中间文件。

简单地让上面的代码工作

在 Excel VBA 中从 .net 获取上述 SUPER DUPER SUPER EASY “com” 对象。

完成后,添加 .net 的 QBFC13 引用,添加所需的属性和 meahots - 现在您就拥有了从 Excel 到 QB 的工作界面。


0
投票

我已经在 VBA 中实现了简单的 QuickBooks 桌面 sdk,并且能够在 QuickBooks 中过帐发票、支票和其他文档。我是会计师,因此对 com 对象不太了解...我只从聊天 GP 复制了代码,根据我的需要调整了一些代码并在 Ms access 中进行调试..现在工作效率很高

© www.soinside.com 2019 - 2024. All rights reserved.