Member 12611727 Ответов: 1

Обновление столбца в excel из инструкции select


Привет,

У меня есть и sql trigger insert/update оператор на location master.
Я вставил данные триггера в таблицу locationmasterhistory, чтобы отслеживать вставленные запасы.

Я создал консольное приложение, чтобы получить данные таблиц locationmasterhistory для экспорта в excel. В locationmasterhistory есть столбец export = "No". Поэтому, когда я экспортирую данные в excel, в кодировке я хочу изменить столбец на "Да". Пожалуйста, помогите мне.

Что я уже пробовал:

Это мой код в консольном приложении :

static void Main(string[] args)
        {
            
            string connectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["IntegrationConnection"].ConnectionString;

            //Location Sheet
            string sql1 = null;
            string data = null;
            int i = 0;
            int j = 0;
            string Filename = @"D:\Integration\Location" + DateTime.Now.ToString("ddMMyyyy HHmmss") + ".xls";
            //string Filename = @"D:\Integration\Location.xls";
            if (!File.Exists(Filename))
            {
                File.Create(Filename).Dispose();
                using (TextWriter tw = new StreamWriter(Filename))
                {
                    tw.WriteLine("Please run the program again");
                    tw.Close();
                }
            }

            ////*** Preparing excel Application
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            ///*** Opening Excel application
            xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(Filename);
            xlWorkSheet = (Excel.Worksheet)(xlWorkBook.ActiveSheet as Excel.Worksheet);

            xlApp.DisplayAlerts = false;
            SqlConnection conn = new SqlConnection(connectionstring);
            conn.Open();

            sql1 = "SELECT * from tblCompBranchHistory where export = 'N'";

            ///*** Preparing to retrieve value from the database
            DataTable dtable = new DataTable();

            SqlDataAdapter dscmd = new SqlDataAdapter(sql1, conn);
            DataSet ds = new DataSet();
            dscmd.Fill(dtable);

            ////*** Generating the column Names here
            string[] colNames = new string[dtable.Columns.Count];
            int col = 0;

            foreach (DataColumn dc in dtable.Columns)
                colNames[col++] = dc.ColumnName;

            char lastColumn = (char)(65 + dtable.Columns.Count - 1);

            xlWorkSheet.get_Range("A1", lastColumn + "1").Value2 = colNames;
            xlWorkSheet.get_Range("A1", lastColumn + "1").Font.Bold = true;

            xlWorkSheet.get_Range("A1", lastColumn + "1").VerticalAlignment
                               = Excel.XlVAlign.xlVAlignCenter;

            /////*** Inserting the Column and Values into Excel file
            for (i = 0; i <= dtable.Rows.Count - 1; i++)
            {
                for (j = 0; j <= dtable.Columns.Count - 1; j++)
                {
                    data = dtable.Rows[i].ItemArray[j].ToString();
                    xlWorkSheet.Cells[i + 2, j + 1] = data;
                    xlWorkBook.Save();
                }
            }

            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);


}

Garth J Lancaster

Это не сразу очевидно, где находится locationmasterhistory .. ваш код, кажется, показывает вам загрузку из таблицы базы данных tblCompBranchHistory в таблицу данных в excel.

Очевидный ответ, в общем случае, заключается в том, чтобы использовать уникальные идентификаторы из таблицы данных для tblCompBranchHistory и построить параматериализованный запрос к

update locationmasterhistory set export = "yes" where ID in [list]
но я не уверен на 100% в вашей схеме

кстати, я предлагаю обновить его по "ID", потому что при таком малом количестве информации, как вы показали, неограниченное обновление locationmasterhistory может быть опасным

Member 12611727

Привет, но я не хочу обновлять таблицу, я хочу обновить столбец excel export = "yes". До или после экспорта в excel я хочу видеть столбец excel как Yes.

DerekT-P

так что это не имеет никакого отношения к оператору select; вам просто нужен столбец, который говорит "Да"... ? Итак, после "колонки" для..next, xlWorkSheet.Ячейки[i + 2, dtable.Столбцы.Count] = "Yes"; (предполагая, что столбец yes/no находится непосредственно справа от столбца данных). Кстати, вы сохраняете всю книгу после обновления каждой ячейки; прекрасно, если возвращается несколько строк, но, вероятно, не так уж и здорово, если их несколько десятков тысяч...! Возможно, мы вас неправильно поняли, но вы так и не объяснили, что именно пытаетесь сделать.

1 Ответов

Рейтинг:
0

MarcusCole6833

Я активно работаю со службами SQL Server Reporting Services(SSRS), и ретрансляция данных на лист excel выполняется за вас; если вы хотите ретранслировать только данные БД. Поэтому, если ваш клиент просто хочет, чтобы данные с некоторыми условными данными были внесены в лист excel, обратите внимание на использование SSRS.

Отметим, что SSRS-это платная услуга MSFT. В SSRS вы можете добавить логику типа excel к результатам из данных.


Что такое службы SQL Server Reporting Services - службы SQL Server Reporting Services (SSRS) | Microsoft Docs[^]



Эта ссылка проведет вас через основы SSRS. Я не являюсь сотрудником MSFT или торговым представителем, просто говорю по собственному опыту.