Лист Excel не сохраняет данные в листе 1 - PullRequest
0 голосов
/ 08 декабря 2018

I Файл Excel с 2 листами, первый лист с именем «PM» и второй лист с именем «km», когда я пытаюсь ввести данные на лист 1 из текстовых полей, это было успешно сделано, но когда я пытался ввести данные на листе 2..лист 1 возвращается в исходное состояние (пусто). Я проверил код, который я сделал сначала 1 лист "xlsht" для обоих листов, но данные не обновлены на обоих листах, затем я сделал 2 функции с 2 листами, но проблема та же,есть идеи почему?

Мой код:

protected void PM_Sheet1()
    {
        try
        {
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            Worksheet xlsht = new Worksheet();
            string path = @"D:\test.xlsx";
            xlsht = xlApp.Application.Workbooks.Open(path).Worksheets["PM"];
            xlsht.Cells[11, 2] = UserNameTxt.Text + "@rasatop.com";
            xlsht.Cells[11, 4] = UserNameTxt.Text;
            xlsht.Cells[14, 2] = SerialTxt.Text;
            xlsht.Cells[16, 2] = WLANMacTxt.Text;
            xlsht.Cells[16, 3] = LANMacTxt.Text;
            xlsht.Cells[16, 4] = IPTxt.Text;
            xlsht.Cells[14, 5] = ComputerTxt.Text;
            xlsht.Cells[16, 5] = BarcodeTxt.Text;
            xlsht.Cells[18, 5] = CPUTxt.Text.Substring(0, 26);
            xlsht.Cells[18, 4] = VGATxt.Text;
            xlsht.Cells[18, 3] = RAMTxt.Text;
            xlsht.Cells[27, 4] = OSTxt.Text;
            xlsht.Cells[5, 4] = System.DateTime.Today;
            xlsht.Cells[26, 4] = System.DateTime.Today;
            xlsht.Cells[9, 5] = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;
            xlsht.SaveAs(@"D:\test1.xlsx");
        }
        catch (Exception)
        {
            MessageBox.Show(@"Make Sure test.xlsx file in D:\ Drive");
        }
    }
    protected void PM_Sheet2()
    {
        try
        {
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            Worksheet xlsht = new Worksheet();
            string path = @"D:\test1.xlsx";
            xlsht = xlApp.Application.Workbooks.Open(path).Worksheets["km"];
            xlsht.Cells[4, 2] = System.DateTime.Today;
            xlsht.Cells[6, 2] = UserNameTxt.Text;
            xlsht.Cells[6, 4] = ComputerTxt.Text;
            xlsht.Cells[6, 5] = BarcodeTxt.Text;
            xlsht.SaveAs(@"D:\" + ComputerTxt.Text + ".xlsx");
            xlApp.Visible = true;
        }
        catch (Exception)
        {
            MessageBox.Show("Error Occured Cannot Save Sheet 2");
        }

    }

1 Ответ

0 голосов
/ 08 декабря 2018

несмотря на документацию , Worksheet.SaveAs() может привести к ошибке, поэтому вы должны использовать Workbook.SaveAs()

Вы также открываете два разных экземпляра Excel, где вам нужен только один иочевидно, что оба они работают!

Наконец, вам лучше открыть экземпляр Excel для всех операций и, следовательно, распространять необходимый код на Form уровне класса (объявления), button1_Click() уровне (Excel и *).1012 * инициализация), вспомогательные методы (Worksheet инициализация)

В следующем порядке:

using System;
using System.Windows.Forms;
using Worksheet = Microsoft.Office.Interop.Excel.Worksheet;
using Workbook = Microsoft.Office.Interop.Excel.Workbook;
using MsExcelApp = Microsoft.Office.Interop.Excel.Application;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        MsExcelApp xlApp =;
        Workbook xlWb;
        Worksheet xlSht;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string path = @"D:\test.xlsx";
            xlApp = new MsExcelApp();


            try
            {
                xlWb = xlApp.Application.Workbooks.Open(path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

            PM_Sheet1();
            PM_Sheet2();

            try
            {
                xlWb.SaveAs(@"D:\" + ComputerTxt.Text + ".xlsx");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            xlApp.Quit();
        }




        protected void PM_Sheet1()
        {
            try
            {
                xlSht = xlWb.Worksheets["PM"];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

            xlSht.Cells[11, 2] = UserNameTxt.Text + "@rasatop.com";
            xlSht.Cells[11, 4] = UserNameTxt.Text;
            xlSht.Cells[14, 2] = SerialTxt.Text;
            xlSht.Cells[16, 2] = WLANMacTxt.Text;
            xlSht.Cells[16, 3] = LANMacTxt.Text;
            xlSht.Cells[16, 4] = IPTxt.Text;
            xlSht.Cells[14, 5] = ComputerTxt.Text;
            xlSht.Cells[16, 5] = BarcodeTxt.Text;
            xlSht.Cells[18, 5] = CPUTxt.Text.Substring(0, 26);
            xlsht.Cells[18, 4] = VGATxt.Text;
            xlsht.Cells[18, 3] = RAMTxt.Text;
            xlsht.Cells[27, 4] = OSTxt.Text;
            xlSht.Cells[5, 4] = System.DateTime.Today;
            xlSht.Cells[26, 4] = System.DateTime.Today;
            xlSht.Cells[9, 5] = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;
        }

        protected void PM_Sheet2()
        {
           try
            {
                xlSht = xlWb.Worksheets["km"];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

            xlSht.Cells[4, 2] = System.DateTime.Today;
            xlSht.Cells[6, 2] = UserNameTxt.Text;
            xlSht.Cells[6, 4] = ComputerTxt.Text;
            xlSht.Cells[6, 5] = BarcodeTxt.Text;
        }
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...