为什么创建Excel文件时代码包含错误并且想要使用它

问题描述 投票:0回答:1

条目是:

创建符合以下要求的 C# 代码:

我们有 3 个工作表,其名称如下:(记录、消费_kardex、工具_列表)。代码启动时将要求两个值,第一个值用于“零件编号”,第二个值用于“操作”。用户输入这两个值后,代码将根据第一个值过滤记录表中的“I”列。然后它将根据第二个值过滤“E”列。接下来,它将计算记录表中 F 列和 G 列中所有值的总和(总和将在应用 I 和 E 列过滤器后计算)。该值将写入第四个工作表 A 列,该工作表将使用名称“comparison.xlsx”创建。

然后,代码将根据用户输入的第一个值(零件编号)过滤 tool_lists 表中的 A 列。在 tool_lists 表中,代码将 D 列和 E 列相乘 (D * E),并将该乘法的所有结果加在一起形成一个结果。该结果将写入第四个表中名为“比较”的 B 列。

接下来,在 tool_lists 工作表中,我们将在 A 列中再次使用过滤,我们将从第 2 行中获取 B 列中的值,并在消费_kardex 工作表中使用它们过滤 B 列。然后,在过滤后的消费_kardex表中,我们将计算C列中的值的总和并将其写入C列中的第四个表比较中。

错误出现在第17行,代码如下:

using System.IO;
using Microsoft.Office.Interop.Excel;

namespace ConsoleApp1
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Získáme vstupní hodnoty od uživatele
            Console.WriteLine("Zadejte číslo dílce:");
            string cisloDilc = Console.ReadLine();
            Console.WriteLine("Zadejte operaci:");
            string operace = Console.ReadLine();

            // Vytvoříme nový sešit s názvem "srovnani.xlsx"
            Workbook workbook = new Workbook();
            workbook.SaveAs("srovnani.xlsx");

            // Vytvoříme instanci třídy Worksheet pro každý sešit
            Worksheet worksheet1 = workbook.Worksheets["zaznamy"];
            Worksheet worksheet2 = workbook.Worksheets["nastrojove_listy"];
            Worksheet worksheet3 = workbook.Worksheets["spotreba_kardex"];

            // Vyfiltrujeme sloupec "I" v tabulce "zaznamy" podle hodnoty "cisloDilc"
            worksheet1.Range["I1:I"].AutoFilter(cisloDilc);

            // Vyfiltrujeme sloupec "E" v tabulce "zaznamy" podle hodnoty "operace"
            worksheet1.Range["E1:E"].AutoFilter(operace);

            // Vypočítáme součet hodnot ze sloupců "F" a "G" v tabulce "zaznamy"
            int soucet = 0;
            for (int i = 1; i <= worksheet1.UsedRange.Rows.Count; i++)
            {
                soucet += Convert.ToInt32(worksheet1.Cells[i, 6].Value) + Convert.ToInt32(worksheet1.Cells[i, 7].Value);
            }

            // Zapíšeme součet do sloupce "A" v tabulce "srovnani"
            worksheet2.Cells[1, 1].Value = soucet;

            // Vyfiltrujeme sloupec "A" v tabulce "nastrojove_listy" podle hodnoty "cisloDilc"
            worksheet2.Range["A1:A"].AutoFilter(cisloDilc);

            // Vypočítáme součet hodnot ze sloupců "D" a "E" v tabulce "nastrojove_listy"
            soucet = 0;
            for (int i = 1; i <= worksheet2.UsedRange.Rows.Count; i++)
            {
                soucet += Convert.ToInt32(worksheet2.Cells[i, 4].Value) * Convert.ToInt32(worksheet2.Cells[i, 5].Value);
            }

            // Zapíšeme součet do sloupce "B" v tabulce "srovnani"
            worksheet3.Cells[1, 2].Value = soucet;

            // Vyfiltrujeme sloupec "B" v tabulce "nastrojove_listy" od řádku 2
            worksheet2.Range["B2:B"].AutoFilter(cisloDilc);

            // Vyfiltrujeme sloupec "B" v tabulce "spotreba_kardex" podle hodnot ze sloupce "B" v tabulce "nastrojove_listy"
            worksheet3.Range["B1:B"].AutoFilter(worksheet2.Range["B2:B"]);

            // Vypočítáme součet hodnot ze sloupce "C" v tabulce "spotreba_kardex"
            soucet = 0;
            for (int i = 1; i <= worksheet3.UsedRange.Rows.Count; i++)
            {
                soucet += Convert.ToInt32(worksheet3.Cells[i, 2].Value);
            }

            // Zapíšeme součet do sloupce "C" v tabulce "srovnani"
            worksheet3.Cells[1, 3].Value = soucet;

            // Uložíme sešit "srovnani.xlsx"
            workbook.Save();

            Console.WriteLine("Srovnání dokončeno.");
        }
    }
}

非常感谢您的帮助。

我尝试创建 Excel 文件,但例外的是,它会毫无问题地创建。

错误:

System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {00020819-0000-0000-C000-000000000046} failed due to the following error: 80040154 Třída není zaregistrována (0x80040154 (REGDB_E_CLASSNOTREG)).

线上:

Workbook workbook = new Workbook();

可能是我的VS2022设置错误。

c# excel comparison filtering variable-assignment
1个回答
1
投票

首先您需要安装 Excel 应用程序:

using System.IO;
using Microsoft.Office.Interop.Excel;

namespace ConsoleApp1
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Získáme vstupní hodnoty od uživatele
            Console.WriteLine("Zadejte číslo dílce:");
            string cisloDilc = Console.ReadLine();
            Console.WriteLine("Zadejte operaci:");
            string operace = Console.ReadLine();

            // Vytvoříme nový sešit s názvem "srovnani.xlsx"
            var oXL = new Microsoft.Office.Interop.Excel.Application();
            var workbook = oXL.Workbooks.Add();
            workbook.SaveAs("srovnani.xlsx");
            ...
© www.soinside.com 2019 - 2024. All rights reserved.