我有一个C#控制台程序.运行时,它会实例化一些Excel对象,例如:(openExcelO).
当程序运行完毕后,我有一个关闭Excel(closeExcel)的方法,它应该正确地清理Excel进程.在任务管理器中,我可以看到剩余的Excel残余.关闭例程从互联网示例拼凑而成:
private void openExcelO (string dir) {
try {
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(dir + "PortfolioOptimization5.xlsm",
0, false, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
"\t", false, false, 0, true, 1, 0);
xlMarkowitz = (Excel.Worksheet)xlWorkBook.Sheets["Markowitz"];
xlWeights = (Excel.Worksheet)xlWorkBook.Sheets["Weights"];
} catch (Exception ex) {
ReportError("PortfolioOptimization", "openExcel", ex.ToString());
}
}
private void closeExcel () {
object misValue = System.Reflection.Missing.Value;
try {
if (xlWeights != null) releaseObject(xlWeights);
if (xlMarkowitz != null) releaseObject(xlMarkowitz);
xlWorkBook.Close(false, misValue, misValue);
if (xlApp != null) xlApp.Quit();
if (xlWorkBook …Run Code Online (Sandbox Code Playgroud) 我的代码如下
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(file);
Excel.Worksheet xlSheet = xlWorkbook.Sheets[1]; // get first sheet
Excel.Range xlRange = xlSheet.UsedRange;
Run Code Online (Sandbox Code Playgroud)
这些是我的函数中使用的唯一变量
foreach (Excel.Worksheet XLws in xlWorkbook.Worksheets)
{
// do some stuff
xlApp.UserControl = false;
if (xlRange != null)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlRange);
if (xlSheet != null)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheet);
if (xlWorkbook != null)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkbook);
xlRange = null;
xlSheet = null;
xlWorkbook = null;
xlApp.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp);
}
Run Code Online (Sandbox Code Playgroud)
但我仍然在任务管理器中得到EXCEL.EXE
请帮忙?
可能重复:
如何在C#中正确清理Excel互操作对象
我用这个函数计算一些数据的线性趋势:
private string Trend(object conocido_y, object conocido_x, object nueva_matriz_x)
{
string result = String.Empty;
try {
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
result = ((Array)xlApp.WorksheetFunction.Trend(conocido_y, conocido_x, nueva_matriz_x, true)).GetValue(1).ToString();
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
xlApp = null;
}
catch (System.Runtime.InteropServices.COMException ex) {
DError.ReportarError(ex, false);
}
catch (Exception ex) {
DError.ReportarError(ex);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
结果很好,但excel应用程序没有关闭,如果我打开任务管理器进程仍在运行,为什么?
我正在尝试通过以下方式从列表中的 Excel 文件获取列数据:
private void Form1_Load(object sender, EventArgs e)
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/test.xlsx");
Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
List<string> FirstColumnValues = new List<string>();
List<string> SecondColumnValues = new List<string>();
for (int row=1; row <= rowCount; row++)
{
for (int col = 1; col <= colCount; col++)
{
switch (col)
{
case 1:
FirstColumnValues.Add(xlRange.Cells[row, col].Value2.ToString());
break;
case 2:
SecondColumnValues.Add(xlRange.Cells[row, col].Value2.ToString());
break;
}
}
}
if …Run Code Online (Sandbox Code Playgroud) 我注意到在准备我的业务规模时,我意识到这项工作花费了太长时间。一个excel文件从理事会通过互联网发送给我们,我们计算我们的作品并使用相同的方式发送它们。所以我想自动化准备业务规模。
为此,我创建了一个 Windows 窗体应用程序。我的应用程序是一个桌面应用程序 (WinForms)。所有数据都写入文本框。当我们单击“确定”按钮时,程序必须读取“template.xls”并将显示括号“{}”的所有变量替换为文本框值。但我不知道如何读取 .xls 文件,用值替换变量并将模板保存为完成的文档。我在下面添加了excel文件的屏幕截图。
你能帮我怎么做吗?
亲切的问候。
我需要创建并保存Excel文件,而不在代码中通知路径和文件名.所以我可以使用savefiledialog来显示保存框以输入路径和文件名,但我无法正确使用它.我尝试使用worksheet.saveas,但是这个类没有显示保存框来输入路径和文件名.如何使用该保存框保存excel文件?
我有一个Visual Basic .NET程序,需要打开和关闭Excel电子表格.打开和阅读电子表格工作正常,但尝试关闭Excel 2007应用程序会导致它挂起.它似乎关闭,但如果你查看任务管理器,应用程序仍在运行.我用来关闭它的代码是
wbkData.Close(saveChanges:=False)
appExcel.Quit()
wbkData = Nothing
appExcel = Nothing
Run Code Online (Sandbox Code Playgroud)
如何让Excel正常关闭?
我试图从vb.net 3.5获得excel文件的excel表名,但它打开但excel.exe仍然在这个过程中.如何在不从任务管理器中删除excel.exe的情况下停止进程?
我意识到新的excel.application开始了新的过程.
我试图使用戒烟,关闭和处置.......................没有任何效果
以下是我的代码
Dim sheetName As New Excel.XlSheetType
Dim newExcell As New Excel.Application
Dim newWorkBook As Excel.Workbook = app.Workbooks.Open(MyFileName)
Dim worksheetName As String
Dim ws As Excel.Worksheet = CType(WB.Worksheets.Item(1), Excel.Worksheet)
worksheetName = ws.Name
Run Code Online (Sandbox Code Playgroud)
我不能使用kill因为有其他excel应用程序正在运行,所以如何从处理器关闭这个特定的excel.exe.请帮忙
我正在为Excel开发一个C#add in(使用VSTO工具).我有一个异步进程正在运行,它会不时弹出通知气泡,显示在靠近任务栏的所有窗口上方.
我能够将事件绑定到弹出的这些气泡上的点击.如果在用户点击时隐藏了Excel插件,我想显示Excel窗口并导航到某个工作表.
这可能吗 ?
void excelsave()
{
try
{
ApplicationClass app = new ApplicationClass(); // the Excel application.
Workbook book = null;
Worksheet sheet = null;
Range range = null;
// the range object is used to hold the data
app.Visible = false;
app.ScreenUpdating = false;
app.DisplayAlerts = false;
string execPath =
Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
book = app.Workbooks.Open(@"E:\SSIS\ABC\Book1.xls",
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value);
sheet = (Worksheet)book.Worksheets[1];
range = sheet.get_Range("A1", Missing.Value);
range.Columns.ColumnWidth = 22.34;
range = sheet.get_Range("B1", Missing.Value); …Run Code Online (Sandbox Code Playgroud) 我正在将一个非常大的Excel文件读入VB.net应用程序.用户在运行时从文件选择器指定文件.我目前正在使用Microsoft.Office.Interop.Excel.Application应用程序接口逐行读取Excel数据.像这样...
first = Excel.Cells(rowindex, FirstColumnIndex).value
Run Code Online (Sandbox Code Playgroud)
我需要读取大的Excel文件(80000行),当前的方法需要很长时间.我想知道是否有更快的方法.我知道可以用ADO.net读取文件.这更快吗?还有更快的方法吗?
注意显然,在Excel文件中保存这么多数据并不是一个想法,但这就是我需要的数据(其中一些来自其他地方)的存储位置.