提问人:user22728505 提问时间:10/12/2023 最后编辑:user22728505 更新时间:10/13/2023 访问量:99
为什么代码在创建 excel 文件时包含错误并想要使用它
Why the code contains error when creating excel file and want to work with it
问:
条目是:
创建具有以下要求的 C# 代码:
我们有 3 张具有以下名称的表:(记录、consumption_kardex、tool_lists)。代码在启动时会要求提供两个值,第一个值用于“部件号”,第二个值用于“操作”。用户输入这两个值后,代码会根据第一个值过滤记录表中的“I”列。然后它将根据第二个值过滤列“E”。接下来,它将计算记录表中 F 列和 G 列中所有值的总和(该总和将在应用 I 和 E 列过滤器后计算)。此值将写入第四张工作表 A 列,该列将创建名为“比较.xlsx”。
然后,代码将根据用户输入的第一个值(部件号)筛选tool_lists表中的 A 列。在tool_lists工作表中,代码将把列 D 和 E (D * E) 相乘,并将此乘法的所有结果相加为一个结果。此结果将写入名为 comparison 的第四张工作表中的 B 列。
接下来,在tool_lists工作表中,我们将在 A 列中再次使用筛选,我们将从第 2 行中获取 B 列中的值,并在consumption_kardex工作表中使用它们过滤 B 列。然后,在过滤后的consumption_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 设置错误。
编辑 13.10.2023
这是我现在的代码:
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();
if (File.Exists("C:\\Users\\11uadber\\Desktop\\appvs\\srovnani.xlsx"))
{
File.Delete("C:\\Users\\11uadber\\Desktop\\appvs\\srovnani.xlsx");
}
var workbook = oXL.Workbooks.Add();
workbook.SaveAs("C:\\Users\\11uadber\\Desktop\\appvs\\srovnani.xlsx");
// Vytvoříme instanci třídy Worksheet pro každý sešit
Worksheet worksheet1 = workbook.Worksheets["C:\\Users\\11uadber\\Desktop\\appvs\\zaznamy.xls"];
Worksheet worksheet2 = workbook.Worksheets["C:\\Users\\11uadber\\Desktop\\appvs\\nastrojove_listy.xlsx"];
Worksheet worksheet3 = workbook.Worksheets["C:\\Users\\11uadber\\Desktop\\appvs\\spotreba_kardex.xlsx"];
// 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.");
}
}
}
现在问题出在这条线上:
Worksheet worksheet1 = workbook.Worksheets["C:\\Users\\11uadber\\Desktop\\appvs\\zaznamy.xls"];
错误代码:
System.Runtime.InteropServices.COMException: Neplatný index. (0x8002000B (DISP_E_BADINDEX))
编辑 13.10.2023 14:55
现在我在这一行上出现错误:
worksheet1.Range["I1:I"].AutoFilter(cisloDilce);
System.Runtime.InteropServices.COMException: 0x800A03EC
答:
首先,您需要获取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");
...
增编一
var wb1 = oXL.Workbooks.Open("C:\\Users\\11uadber\\Desktop\\appvs\\zaznamy.xls")
var worksheet1 = wb1.Worksheets["Prostěradlo1"];
使用所需的工作表名称或索引,而不是“Prostěradlo1”虚拟人。
评论
Workbook
Workbook
评论