- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 C# 程序可以从 .txt 文件创建 Excel 文件报告。
它工作完美,但有时(经常)当我打开一个电子表格时,Excel 会打开 2 个电子表格:
1 我保存的文件。1 有一些名为“Plan1”的垃圾数据未保存。
我不确定 excel 在哪里找到 Plan1 的垃圾数据。
这是保存电子表格的代码:
protected string ExportOC(Application app, OcFile oc, bool configurator)
{
string ocFinalName;
if (configurator)
ocFinalName = string.Format("{0}{1}", ocFinalName = oc.Name, Models.Constants.CHECK_CONFIGURATOR);
else if (oc.Error)
ocFinalName = string.Format("{0}{1}", ocFinalName = oc.Name, Models.Constants.CHECK_STRUCT_ERROR);
else
ocFinalName = string.Format("{0}{1}", ocFinalName = oc.Name, Models.Constants.CHECK_OK);
try
{
string savePath = string.Format("{0}{1}", Importer.GetPathWithType(ConfigurationManager.AppSettings[Modelos.Constants.SAVE_ROOT_PATH].ToString(), oc.Type), ocFinalName);
app.DisplayAlerts = false;
app.ActiveWorkbook.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
app.ActiveWorkbook.SaveAs(savePath, XlFileFormat.xlOpenXMLWorkbook, Missing.Value,Missing.Value, false, false, XlSaveAsAccessMode.xlNoChange,XlSaveConflictResolution.xlUserResolution,true,Missing.Value, Missing.Value, Missing.Value);
return string.Format("{0}{1}", ocFinalName, Models.Constants.EXTENSION_EXCEL_X);
}
catch (Exception)
{
return InvalidOC(oc, Models.Constants.CHECK_NO_SAVED);
} finally
{
ClearCOM(app);
}
}
下面是我如何清理 COM 对象:
protected void ClearCOM(Application app)
{
try
{
app.DisplayAlerts = false;
app.ActiveWorkbook.Close(0);
app.Quit();
Marshal.ReleaseComObject(app);
}
catch
{
return;
}
}
我不确定我是否应该把打开电子表格的代码放在这里,因为即使我在程序外打开文件时也会出现这个问题(只要我关心,它比在程序内打开的频率更高)。
感谢帮助
编辑
工作表的名称必须包含特殊字符,例如:5198416384684_003这是我创建 COM 对象的方法。
public string ProcessOC(OcFile oc) {
Application app = new Application();
Workbook workbook = app.Workbooks.Add(1);
Worksheet plan = (Worksheet)workbook.Sheets[1];
plan.Name = oc.Name;
bool rightSize = false;
bool haveMoreDocuments = false;
int indexLine = 1, indexColumn = 1;
int lin = 1, col = 0;
string columnLetter = String.Empty;
string ajusteTextoNum = String.Empty;
try {
List<string> validLines = GetValidContent(oc.Lines);
foreach (string line in validLines) {
//get the txt lines and put all of them im the worksheet
}
// format the worksheet
return ExportOC(app, oc, false);
} catch (WrongPrinterException) {
return InvalidOC(oc, Modelos.Constants.CHECK_NO_PRINTER); //doesn't save
} catch (MissingFileException) {
return InvalidOC(oc, Modelos.Constants.CHECK_MISS_SOURCE_FILE); //doesn't save
} catch (Exception) {
return InvalidOC(oc, Modelos.Constants.CHECK_NO_SAVED); //doesn't save
} finally {
ClearCOM(app);
}
}
以及问题本身。
抱歉省略了一些值(value)观,这是公司政治。这一次,我在程序外打开,那些数据并不是真正的垃圾,它是另一个格式不同的报告,运算符(operator)可能之前关闭了。
也许 Excel 正在尝试恢复以前的 session 。
我将尝试清理其他 COM 对象并也使用 Marshal.ReleaseComObject。
编辑 2
我尝试清除 COM 对象,但仍然一次打开 2 个电子表格。
这里是清除COM的代码
protected void ClearCOM(Application app, Workbook workbook, Worksheet worksheet) {
try {
app.DisplayAlerts = false;
app.ActiveWorkbook.Close(0);
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(worksheet);
app.Quit();
Marshal.ReleaseComObject(app);
} catch {
return;
}
}
编辑 3
我已经清理了 XLSTART 文件夹,还是没有
最佳答案
对于仍然有此问题的任何人。我通过使用 Workbooks.Add
创建一个 Workbook
解决了这个问题方法而不给它任何参数。所以在 OPs 问题中,改变这个:
Application app = new Application();
Workbook workbook = app.Workbooks.Add(1);
对此:
Application app = new Application();
Workbook workbook = app.Workbooks.Add(); // No parameters
Add
方法有一个可选的Template
参数,类型可以是XlWBATemplate
。 . OP 使用 1
作为此参数的值,在这种情况下这不是有效值。
这是文档中关于忽略参数的内容:
If this argument is omitted, Microsoft Excel creates a new workbook with a number of blank sheets (the number of sheets is set by the SheetsInNewWorkbook property).
关于c# - 问:Interop.Excel 打开两个文件实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37550641/
我有这个gradle命令行,可以完美地工作: /gradle app:testalldevicesproductionenv -Pandroid.testInstrumentationRunnerAr
因此,我使用 NativeBase 作为组件框架来开发 React Native 应用程序。 我正在使用卡片组件。 这是我的代码: render(){ return(
假设我有这样的Kotlin代码: val var1:String? = isVar1Present() val var2:String? = isVar2Present() val var3:Stri
我想要一些有关当前正在使用的程序的指导,如果用户两次输入相同的值,我已经成功创建了一对整数并处理了异常。我一直坚持执行创建对的相同过程,但不是整数,它必须是字符串。 我的一个建议是更改有序对的随机生成
我的 node.js e2e 测试有问题。我想等待 2 个 promise 解决。但由于某种原因,当我使用 Q.all 时,它只是卡住了我的应用程序。我正在使用 kriskowal 的 Q 1.0.0
实际上我已经开发了使用 Hdfs 存储图像的应用程序。现在我想迁移服务器并在新服务器中再次设置 hadoop。我如何将 HDFS(旧服务器)中的图像文件备份到新服务器中的 HDFS? 我尝试使用 Co
我想在GCP上建立一个完全自动化的CI / CD管道。在Cloud Build中,我已经有了一个cloudbuild.yaml,它可以构建Dockerfile并将构建的Docker镜像推送到Conta
我刚刚开始使用Docker,并能够使用Ubuntu 14.03 / LXDE / VNC设置Docker镜像,由于我可以从外部连接到VNC服务器,因此可以很好地工作。 现在,我试图理解Docker的网
我有 Talend Studio Data Intergration 6.2.1。作业导出为 .war,作为 Web 服务在服务器上执行。 我的问题是,有什么方法可以找出哪个应用程序调用我的 ws?
这个问题在这里已经有了答案: Why is super.super.method(); not allowed in Java? (22 个答案) 关闭 9 年前。 我怀疑我想做的事情是否可行。我有
我似乎无法找到正确的方式来表达这一点以进行 Google 搜索。 当我使用 q.all 并且只有一两个失败时(在 Node.js 中)会发生什么。我需要为我使用 Promise 的所有成功实例输入 .
Closed. This question needs to be more focused. It is not currently accepting answers. Learn more。 想
我已经整理了一个宏,它允许我将数据从一张表存档到另一张表,但是我无法让它在之后清除信息。第一列包含我不想清除的数字,现在它只是清除 B 列中的数据。 如果有人可以看看这个,我会非常感激。 'Sub a
我有一个 C# 程序可以从 .txt 文件创建 Excel 文件报告。 它工作完美,但有时(经常)当我打开一个电子表格时,Excel 会打开 2 个电子表格: 1 我保存的文件。1 有一些名为“Pla
为什么不玩 onclick="catch()"?我不明白。 function catch () { alert("safsf"); } ... 最佳答案 catch 是
在 Q 中,有哪些方法可以在 where 子句中使用嵌套查询的结果? 我正在寻找类似于 SQL 语句的内容。 select from food where type_id in ( selec
虽然这段代码可以工作: var promise = function(val) { var _val = val; return setTimeout(function(_val) {
自Mozilla和Google宣布,他们打算将来使用默认设置通过HTTPS激活DNS,并且IETF正式批准了该草案(https://datatracker.ietf.org/wg/doh/about/
OnClickListener 无法与 ScrollView 一起使用,因为“扩展了 Fragment”。我该如何使用它呢?一个例子就足够了。谢谢.. 更新Fragment1.java package
char name[20]=""; char address [50]= ""; do{ printf("Input your name [1..20] : "); scanf("%s
我是一名优秀的程序员,十分优秀!