我很清楚微软的支持基础文章说它不支持自动化办公产品UI.似乎Windows Server 2008 x64和Excel 2007强制执行给定的语句.
我在NT服务(本地系统帐户)OnStart方法中运行以下代码.当它在控制台应用程序中运行相同的代码时,它所做的只是Excel自动化.
提供的代码有两部分.第一部分启动Excel,创建一个新的工作簿并将其保存到给定的文件名.第二部分启动Excel的新实例并打开给定文件.打开操作以此异常结束:
服务无法启动.System.Runtime.InteropServices.COMException(0x800A03EC):Microsoft Office Excel无法访问文件'c:\ temp\test.xls'.有几个可能的原因:
•文件名或路径不存在.•该文件正由另一个程序使用.?您尝试保存的工作簿与当前打开的工作簿具有相同的名称.
为什么自动excel能够启动并将文件写入磁盘但是当它被要求"只是"打开现有文件时失败?
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
true,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
false,
false,
System.Reflection.Missing.Value, …Run Code Online (Sandbox Code Playgroud) 所以我和一位同事就一段代码进行了友好的争论:
public sealed class NewObject
{
private string _stuff = string.Empty;
public string Stuff
{
get { return GetAllStuff(); }
}
private string GetAllStuff()
{
//Heavy string manipulation of _stuff
}
public NewObject(string stuffToStartWith)
{
_stuff = stuffToStartWith;
}
public static NewObject operator +(NewObject obj1, NewObject obj2)
{
if (obj1 == null)
throw new ArgumentNullException();
if (obj2 == null)
throw new ArgumentNullException();
NewObject result = new NewObject(string.Empty);
result._stuff = String.Concat(obj1._stuff, obj2._stuff);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
争论在于操作员覆盖.我的同事认为,除了构造函数之外,设置私有字段的值不是最好的编程习惯.我的同事提出的解决方案是重构Stuff属性的名称AllStuff并添加一个属性 …
我有一个很大的疑问.
让我们以一个公司订单的数据库为例.
假设这家公司每月大约生产2000个订单,那么,每年大约24K订单,他们不想删除任何订单,即使它是5年(嘿,这是一个例子,数字并不意味着任何东西).
在具有良好的数据库查询速度的意义上,它最好只有一个表,或者每年有一个表更快?
我的想法是每年为订单创建一个新表,称为orders_2008,orders_2009等.
加速数据库查询可能是一个好主意吗?
通常使用的数据是当前年份的数据,因此行数越少越好.显然,当我同时搜索所有订单表时,这会产生问题,因为我是否应该运行一些复杂的UNION ..但这种情况在正常活动中非常罕见.
我认为最好有一个应用程序,95%的查询是快速的,剩下的有点慢,而不是一个总是很慢的应用程序.
我的实际数据库是130个表,我的应用程序的新版本应该有大约200-220个表...其中约40%将每年复制.
有什么建议吗?
编辑:RDBMS可能是Postgresql,也许(希望不是)Mysql
是否首选使用"Id"作为主键的列名或"[TableName] Id"作为命名约定?
表:帐户
主键:Id
- 与 -
表:帐户
主键:AccountId
在我看到的实现中似乎分裂了大约50%/ 50%.每种方法有哪些优缺点?
跟进:
在我的数据库中使用一个约定,在代码中使用另一个约定是否有意义?或者我应该保持一致吗?在大多数ORM中,这怎么会最好?
typeof(string).IsPrimitive == false
typeof(int).IsPrimitive == true
typeof(MyClass).IsClass == true
typeof(string).IsClass == true
typeof(string).IsByRef == false
typeof(MyClass).IsByRef == true // correction: should be false (see comments below)
Run Code Online (Sandbox Code Playgroud)
我有一个实例化T的新实例的方法,如果它是一个"复杂"类,则从一组源数据值中填充其属性.
(a)如果T是简单类型(例如字符串或int或其他类似的东西),则执行从源数据到T的快速转换.
(b)如果T是一个类(但不是像字符串这样简单的东西),那么我将使用Activator.CreateInstance并进行一些反射来填充字段.
是否有一种快速而简单的方法来判断我是否应该使用方法(a)或方法(b)?此逻辑将在通用方法中使用,其中T作为类型参数.
是否有任何工具,除了KCacheGrind,能够查看callgrind结果?对于Windows平台最好?
我刚学习C++,刚刚开始讨论QT,我坐在这里想知道大多数应用程序如何保存数据?有行业标准吗?他们将它存储在XML文件,文本文件,SQLite中吗?会计软件需要保存的敏感数据呢?我只是想了解这方面的最佳实践.
谢谢
我有一个问题,需要一个可逆的1:1键到值的映射.
这意味着有时我想找到一个给定键的值,但有时我想找到给定值的键.键和值都保证唯一.
x = D[y]
y == D.inverse[x]
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方案是每次我想要反向查找时简单地反转字典:反转字典非常容易,这里有一个配方但是对于大字典它可能非常慢.
另一种方法是创建一个新的类,它将两个字典统一起来,每个字典对应一种查找.这很可能很快,但会消耗两倍于单个字典的内存.
那么我可以使用更好的结构吗?
我正在研究SQL Server 2005存储过程中的一个奇怪的错误,我无法通过直接从Management Studio调用它来重现它.
因此,我希望能够:
这是可能的,如果是这样的话怎么样?
我尝试将结构作为第4个参数传递,同时使用pthread_create()类似这样的东西:
pthread_create(&tid1, NULL, calca, &t); //t is the struct
Run Code Online (Sandbox Code Playgroud)
现在每当我尝试访问结构中的变量-ta,tb或tc时,我都会收到错误 - 请求成员不是结构或联合.
我可以使用什么替代方法将结构传递给线程?