如何在 C# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?
Posted
技术标签:
【中文标题】如何在 C# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?【英文标题】:How do you save an open document using Microsoft.Office.Interop.Excel.Application in C#? 【发布时间】:2021-01-03 11:04:33 【问题描述】:我有以下代码:
private void btnExcel_Click(object sender, EventArgs e)
if (dataGridView1.Rows.Count > 0)
Microsoft.Office.Interop.Excel.Application XcelApp = new Microsoft.Office.Interop.Excel.Application();
XcelApp.Application.Workbooks.Add(Type.Missing);
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
XcelApp.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
try // catches null cells and ignores
for (int j = 0; j < dataGridView1.Columns.Count; j += 2)
XcelApp.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
catch (NullReferenceException)
catch (Exception ex)
MessageBox.Show(ex.Message + "\n" + ex.InnerException);
XcelApp.Columns.AutoFit();
XcelApp.Visible = true;
string pathway = @"C:\Temp\" + txtComputer.Text + "." + lblVersion.Text + "." + lblProduct.Text + ".csv";
XcelApp.GetSaveAsFilename(pathway, "CSV (Comma Delimited) (*.csv), *.csv",2, DialogResult.OK);
这会将 datagridview 输出到 Excel 电子表格,打开它,然后打开保存文件对话框以将文档保存为 CSV。 我有几个问题:
-
如果我点击保存,它似乎完全忽略了保存并且没有保存任何文档。
理想情况下,我希望它自动保存,我一点也不担心它会打开。
Excel.Application 没有提供 Save() 或 SaveAs() 方法来执行上述任何操作,因此我假设我使用了不正确的参考。我将使用什么来自动保存此文档?
谢谢
【问题讨论】:
这是具有 SaveAs /Save 方法的工作簿对象,因此:您应该在使用 Add() 方法创建 Workbook 对象时获得对它的引用。然后您使用该参考:wb.SaveAs(....)。在 Excel VBA 文档中查找此内容,然后转换为 C# 以便于理解 感谢@MacroMarc。我一直在玩工作簿并且遇到了错误。但是,在您确认之后,我已经发布了我在下面工作的代码。 您还应该访问Workbook.Cells
等,而不是Application
,因为这只是重点。例如。你可以用这样隐藏的工作簿来完成这一切
干得好,乐于助人
【参考方案1】:
private void btnExcel_Click(object sender, EventArgs e)
if (dataGridView1.Rows.Count > 0)
Microsoft.Office.Interop.Excel.Application XcelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelWorkBook = XcelApp.Workbooks.Add();
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
XcelApp.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
try // catches null cells and ignores
for (int j = 0; j < dataGridView1.Columns.Count; j += 2)
XcelApp.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
catch (NullReferenceException)
catch (Exception ex)
MessageBox.Show(ex.Message + "\n" + ex.InnerException);
string pathway = @"C:\Temp\" + txtComputer.Text + "." + lblVersion.Text + "." + lblProduct.Text + ".csv";
excelWorkBook.SaveAs(pathway, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV);
XcelApp.Workbooks.Close();
【讨论】:
以上是关于如何在 C# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?的主要内容,如果未能解决你的问题,请参考以下文章