如何在 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 保存打开的文档?的主要内容,如果未能解决你的问题,请参考以下文章

写了一个把dataset导出到Excel的winform程序,点击导出就报错,下面是错误信息,谁帮我看看怎么回事?

如何在 C# 的泛型中使用扩展

如何在网站项目中使用 C# 7? [复制]

如何在 C# 中使用 libcinder?

如何在 C# 中使用 imageMagick

我如何在 webBrowser 中使用 c# 执行点击事件