小编Ahm*_*mad的帖子

如何正确有效地使用WorkbookBeforeClose事件?

每天,一个人需要检查特定工作簿是否已经使用彭博和路透社的市场数据进行了正确更新; 即所有数据都已通过并且"数字看起来正确".在过去,人们没有检查导致上传到其他系统的"数字"不正确.

我们的想法是,需要开发"某些东西"以防止使用关闭/保存工作簿,除非他/她已检查更新是否正确/准确.该numbers look correct动作纯粹是一种直观的练习,因此不会以任何方式编码.

简单的解决方案是在关闭特定工作簿之前提示用户验证数据是否已被检查.

使用VSTO SE for Excel 2007,创建了一个加载项,该加载项挂接到WorkbookBeforeClose在加载项中初始化的事件ThisAddIn_Startup

private void wb_BeforeClose(Xl.Workbook wb, ref bool cancel)
{
    //.... snip ...

    if (list.Contains(wb.Name))
    {
        DailogResult result = MessageBox.Show("some message", "sometitle", MessageBoxButtons.YesNo);

        if (result != DialogResult.Yes)
        {
            cancel = true; // i think this prevents the whole application from closing
        } 
    } 
}
Run Code Online (Sandbox Code Playgroud)

我发现以下ThisApplication.WorkbookBeforeSavevsThisWorkbook.Application.WorkbookBeforeSave建议人们应该使用ThisApplication.WorkbookBeforeClose我认为正在做的事件,因为它将跨越所有打开的文件.

我对该方法的问题是假设我打开了几个文件,其中一些文件在我的文件中list,该事件阻止Excel按顺序关闭所有文件.现在需要单独关闭每个文件.编辑:从文件菜单中使用退出Excel时会发生这种情况.

问题

  1. WorkbookBeforeClose是否正确使用了该活动,是否有效且高效地使用了该活动?
  2. 我应该使用应用程序级事件还是文档级事件
  3. 上述行为是否正常 …

c# excel vsto excel-2007

7
推荐指数
1
解决办法
4959
查看次数

如何使用GroupBy()分组多个项目?

考虑以下简化对象和关系:

public class Job{
  int JobId;
  String name;
  String status;
  Discipline disc;
  WorkCategory workCat;
}

public class Discipline {
  int DisciplineId;
  String DisciplineName;
}

public class Workcategory{
   int WorkCategoryId;
   String WorkCategoryName;
}

public Class Grouping{
   Discipline parent;
   List<Workcategory> children;
}
Run Code Online (Sandbox Code Playgroud)

上面描述了a Job与一个Discipline和一个相关联的关系WorkCategory.的Workcategory始终是一个特定的父母的孩子Discipline(一个一对多的关系).我们可以假设指定的Discipline和Workcategory的关系始终有效.

我面临的问题是当我尝试Grouping基于应用的过滤器创建结果对象时Jobs.我不确定如果可以做到这一点,或者我采取的方法是否正确.确切的问题本身并不清楚,但上面定义了问题陈述.

  1. 设计可以改进吗?
  2. 如何按学科和工作类别对作业进行分组?
  3. 我甚至需要Grouping上课吗?

我尝试了以下(这是我第一次尝试使用Linq),但没有成功,因为我的理解不够完整.另一种方法是首先获取Discipline组并循环通过原始分组拾取相关的Workcategory.

var grouping = repository.GetJobsWithActiveStatus()
            .GroupBy(x => new {
                                  x.Discipline.DisciplineID, 
                                  x.Discipline.DisciplineName,  
                                  x.Category.WorkCategoryID, 
                                  x.Category.WorkCategoryName
                              })
            .Select(g …
Run Code Online (Sandbox Code Playgroud)

c# linq group-by

6
推荐指数
1
解决办法
5727
查看次数

通过SWIG为C#编译Quantlib

任何人都有使用SWIG的经验吗?我目前正在研究QuantLib,并发现可以使用SWIG生成C#代码.我们正在探索使用QuantLib和专有的闭源库(可能以.Net dlls的形式提供)来创建财务功能组合库的选项.我们的想法是将这两者结合起来创建一个统一的超级库.我已经看到了QuantLib.Net端口,但它似乎没有被主动维护(并且不完全确定实际移植了多少),所以我避免使用它.

第一步是评估生成可以在任何地方使用的库的难度,即MS Office应用程序(通过VBA),控制台应用程序以及服务器端(例如Web应用程序).我认为这涉及COM Interop,但我不知道从哪里开始,或者我是否在正确的轨道上.

我没有使用C++的经验; 和COM是我(我现在的一个流行语),我已经釉面了.我知道与此主题相关的相关MSDN文章.

我正在寻找以下几行的帮助:

  1. 是否有在C#中使用QuantLib的替代方案?
  2. 关于我的开发环境,我需要什么?
  3. 有没有人知道通过SWIG编译的即用型QuantLib C#库?(一等奖=对我来说工作少)

任何帮助表示赞赏

编辑:我已经接受了我的答案作为正确的答案,除非提供更好的答案.

c# c++ swig com-interop quantlib

6
推荐指数
1
解决办法
5326
查看次数

在OpenXml-SDK中使用TDD

我已经开始使用TDD方法开发一个从Excel文件中读取数据的小应用程序.使用存储库模式类型的方法,我遇到了困扰我的障碍.

为了读取Excel文件,我使用的是OpenXml-SDK.现在通常使用SDK从Excel文件中读取需要几个(如果不是更多)步骤来实际获取您想要读取的值.

到目前为止,我所采用的方法反映在以下测试和附带功能中.

    [Test]
    public void GetRateData_ShouldReturn_SpreadSheetDocument()
    {
        //Arrange
        var fpBuilder = new Mock<IDirectoryBuilder>();
        fpBuilder.Setup(fp => fp.FullPath()).Returns(It.IsAny<string>());

        var doc = new Mock<IOpenXmlUtilities>();
        doc.Setup(d => d.OpenReadOnlySpreadSheet(It.IsAny<string>()))
             .Returns(Mock.Of<SpreadsheetDocument>());

        swapData = new SwapRatesRepository(fpBuilder.Object, doc.Object);

        //Act
        var result = swapData.GetRateData();

        //Assert
        doc.Verify();
        fpBuilder.Verify();
    }

public class SwapRatesRepository: IRatesRepository<SwapRates>
{
    private const string SWAP_DATA_FILENAME = "DATE_MKT_ZAR_SWAPFRA1.xlsx";
    private IDirectoryBuilder builder;
    private IOpenXmlUtilities openUtils;

    public SwapRatesRepository(IDirectoryBuilder builder)
    {
        // TODO: Complete member initialization
        this.builder = builder;
    }

    public SwapRatesRepository(IDirectoryBuilder builder, 
                                       IOpenXmlUtilities openUtils)
    {
        // TODO: Complete member …
Run Code Online (Sandbox Code Playgroud)

c# tdd unit-testing openxml openxml-sdk

6
推荐指数
1
解决办法
866
查看次数

Asp.net MVC3中默认编辑器和显示模板的位置是什么?

当安装Asp.Net MVC 3时,默认的Razor Editor和Display模板(例如String.cshtml,DateTime.cshtml)位于何处?

asp.net-mvc-3

6
推荐指数
1
解决办法
1066
查看次数

如何遍历表并按列标题访问行项?

我有以下宏需要循环Excel-2007表.该表有几列,我目前正在使用Index属性列找到正确的列位置.

使用索引是我能找到正确索引到fName对象的唯一方法.我希望的更好的选择是使用列名称/标题访问特定列.我怎么能这样做甚至可以做到这一点?

此外,一般来说,有没有更好的方法来构建这个循环?

Worksheets("Lists").Select

Dim filesToImport As ListObject 
Dim fName As Object
Dim fileNameWithDate As String

Dim newFileColIndex As Integer
Dim newSheetColIndex As Integer
Set filesToImport = ActiveSheet.ListObjects("tblSourceFiles")

newFileColIndex = filesToImport.ListColumns("New File Name").Index // <- Can this be different?

For Each fName In filesToImport.ListRows // Is there a better way?
    If InStr(fName.Range(1, col), "DATE") <> 0 Then
        // Need to change the ffg line to access by column name
        fileNameWithDate = Replace(fName.Range(1, newFileColIndex).value, "DATE", _
                                  Format(ThisWorkbook.names("ValDate").RefersToRange, …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-2007 excel-vba

5
推荐指数
3
解决办法
4万
查看次数

How to convert a Variant array to a Range?

I have a 2D array of type Variant. The size and values that populate the array are generated based on data within a worksheet. Further processing is required on this array, the primary being the interpolation of several values. I am using this interpolation function (I know about excel equivalent functions but a design choice was made not to use them) . The problem I am having is the that the Interpolation function requires a Range object.

I have …

excel vba excel-2007

5
推荐指数
1
解决办法
2万
查看次数

哪种类型的情况适合使用关系数据库和NoSQL数据库?

这不是NoSQL vs. SQL类型的问题.我对可以使用RDBMS和NoSQL数据库的组合的场景类型感兴趣,并且组合的使用非常适合.一般情况下,我明白了"这取决于"手头上的形势和任务,但我的想法是,必须有一些普通/通用1分的情况下这样的组合是非常有用的.

上述每种类型的解决方案都有自己的优点和缺点 - 我所追求的是可以充分利用和利用两者优势的情况/场景.

在我看来,一个可能是电子商务.RDBMS上的付款,交易等(想想ACID 2)以及NoSQL数据库中的产品信息和目录.但是,它适合吗?

应用的横切关注点,例如.作为另一个例子,日志记录可能非常适合NoSQL类型的解决方案.

或者,为什么不组合使用这两种技术?

编辑:重申一下,我理解SQL和NoSQL都有其固有的优点和缺点,并且某些类型的情况更适合上述数据存储中的一个.

1我知道像Facebook,谷歌等巨头可能会使用这些巨头,但几乎在大多数情况下,我认为大多数SO成员都不会在这些巨大的解决方案上工作.更典型的日常类型的东西.

2 RavenDB是一种支持ACID事务的NoSQL解决方案

sql rdbms nosql

5
推荐指数
1
解决办法
1517
查看次数

c#可执行控制台应用程序的生命周期(如果有)是什么?

我有兴趣了解C#控制台应用程序是否存在任何生命周期,类似于ASP.Net生命周期.

我特别感兴趣

  • 装配分辨率 - 何时发生
  • 编译 - 该static Main方法如何影响依赖对象的编译

c# console-application

3
推荐指数
1
解决办法
1330
查看次数

〜运算符在此代码中有什么用途?

我已经深入挖掘了SWIG为Quantlib生成的C#代码,并遇到了以下代码,这给了我一个谦卑的时刻.

每个生成的类都实现IDisposable,并且每个生成的类都具有下面指出的这个约定.

public class MultiPath : IDisposable { // MultiPath is interchangable
  private HandleRef swigCPtr;
  protected bool swigCMemOwn;

  internal MultiPath(IntPtr cPtr, bool cMemoryOwn) {
    swigCMemOwn = cMemoryOwn;
    swigCPtr = new HandleRef(this, cPtr);
  }

  internal static HandleRef getCPtr(MultiPath obj) {
    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  }

  ~MultiPath() { // <---- 
    Dispose();
  }

  public virtual void Dispose() {
    lock(this) {
      if (swigCPtr.Handle != IntPtr.Zero) {
        if (swigCMemOwn) {
          swigCMemOwn = false;
          NQuantLibcPINVOKE.delete_MultiPath(swigCPtr);
        }
        swigCPtr = …
Run Code Online (Sandbox Code Playgroud)

c# swig

2
推荐指数
1
解决办法
411
查看次数

在Visual Studio 2010中更改Xml值的正确字体和颜色选项是什么?

我已尝试过大多数相关的XML*颜色选项,Fonts and Colors 但似乎无法找到更改下图中蓝色文字颜色的正确选项.此外,它们都没有与它们相关的蓝色(或相关)颜色.此蓝色文本显示所有name属性.

代码段来自app.config文件.Fonts and Colors我可以使用哪个正确的选项来更改name值的颜色?

需要更改的蓝色文本

xml fonts colors visual-studio-2010

2
推荐指数
1
解决办法
452
查看次数

我可以创建一个在C#中接受两种不同类型的泛型方法吗

我可以创建一个接受两种类型的通用方法.在attributeTypets_attributeType虽然他们有相同的字段不共享任何共同的父类.

这可能吗?或者我有什么方法可以做到这一点?

private static void FieldWriter<T>(T row)
        where T : attributeType, ts_attributeType

    {
        Console.Write(((T)row).id + "/" + (((T)row).type ?? "NULL") + "/");
    }
Run Code Online (Sandbox Code Playgroud)

从Jon Skeet看到了这个答案,但我不确定它是否也适用于我的问题.

一些进一步的背景:这两个attributeTypets_attributeType使用xsd.exe工具已创建; 并且是部分类.

c# c#-4.0

2
推荐指数
1
解决办法
6613
查看次数