C# 调用OFFICE库将识别结果存放到EXCEL表
using Baidu.Aip.Ocr;
using IniParser;
using IniParser.Model;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace 发票识别
{
public partial class frmmain : Form
{
public List<string> listpath = new List<string> { };
public frmmain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
{
folderBrowserDialog.Description = "请选择一个文件夹";
DialogResult dialogResult = folderBrowserDialog.ShowDialog();
if (dialogResult == DialogResult.OK)
{
string selectedFolderPath = folderBrowserDialog.SelectedPath;
tbx_path.Text = selectedFolderPath;
}
}
}
private void Getfiles(string path)
{
string folderPath = path; // 替换为你的文件夹路径
string[] filePaths = Directory.GetFiles(folderPath, "*", SearchOption.AllDirectories);
foreach (string filePath in filePaths)
{
listpath.Add(filePath);
}
lbl_numcount.Text = listpath.Count.ToString();
}
private void btn_start_Click(object sender, EventArgs e)
{
Getfiles(tbx_path.Text);
if (listpath.Count > 0)
{
chuli();
}
}
private void chuli()
{
Excel.Application excelApp = new Excel.Application();
// 创建一个新的工作簿
Excel.Workbook workbook = excelApp.Workbooks.Add(Type.Missing);
// 添加一个名为“发票识别”的新工作表
Excel.Worksheet worksheet = workbook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing) as Excel.Worksheet;
worksheet.Name = "发票识别";
excelApp.Visible = true;
worksheet.Cells[1, 1] = "资产编号";
worksheet.Cells[1, 2] = "发票文件名";
worksheet.Cells[1, 3] = "OCR名称";
worksheet.Cells[1, 4] = "OCR规格型号";
worksheet.Cells[1, 5] = "OCR单位";
worksheet.Cells[1, 6] = "OCR数量";
worksheet.Cells[1, 7] = "OCR单价";
worksheet.Cells[1, 8] = "OCR金额";
worksheet.Cells[1, 9] = "合计";
worksheet.Cells[1, 10] = "资产原值";
worksheet.Cells[1, 11] = "购入日期";
RetrunClass retrunClass = new RetrunClass();
int iOCR = 2;
int iOCR2 = 2;
int iOCR3 = 2;
int iOCR4 = 2;
int iOCR5 = 2;
int iOCR6 = 2;
int iOCR7 = 2;
int iO = 1;
int iO2 = 0;//判断是否有异常标志位
int i3 = 1;
foreach (var item in listpath)
{
tbx_view_over.AppendText(item + "\r\n");
lbl_chuli.Text = iO.ToString();
//拆分文件名和资产编号
string directoryName = Path.GetDirectoryName(item);//资产编号
string fileName = Path.GetFileName(item);//文件名
string parentFolderName = new DirectoryInfo(directoryName).Name;
worksheet.Cells[iOCR, 1] = parentFolderName;
worksheet.Cells[iOCR, 2] = fileName;
//OCR内容
var strname = JsonConvert.DeserializeObject<dynamic>(rest.StrPanth(item));
var eritem = strname.words_result;
if (strname != null)
{
retrunClass.log_id = strname.log_id;
try
{
var OCRheji = eritem.AmountInFiguers;
var OCRyuanz = eritem.TotalAmount;
var OCRdate = eritem.InvoiceDate;
worksheet.Cells[iOCR, 9] = OCRheji;
worksheet.Cells[iOCR, 10] = OCRyuanz;
worksheet.Cells[iOCR, 11] = OCRdate;
var OCRname = eritem.CommodityName;
var OCRguige = eritem.CommodityType;
var OCRdanwei = eritem.CommodityUnit;
var OCRnum = eritem.CommodityNum;
var OCRprice = eritem.CommodityPrice;
var OCRjine = eritem.CommodityAmount;
foreach (var word in OCRname)
{
worksheet.Cells[iOCR2, 3] = word.word.ToString();
worksheet.Cells[iOCR2, 1] = parentFolderName;
iOCR2++;
}
foreach (var word in OCRguige)
{
worksheet.Cells[iOCR3, 4] = word.word.ToString();
iOCR3++;
}
foreach (var word in OCRdanwei)
{
worksheet.Cells[iOCR4, 5] = word.word.ToString();
iOCR4++;
}
foreach (var word in OCRnum)
{
worksheet.Cells[iOCR5, 6] = word.word;
iOCR5++;
}
foreach (var word in OCRprice)
{
worksheet.Cells[iOCR6, 7] = word.word;
iOCR6++;
}
foreach (var word in OCRjine)
{
worksheet.Cells[iOCR7, 8] = word.word;
iOCR7++;
}
iOCR = iOCR2;
}
catch (Exception)
{
iO2 = 1;
lbl_yichang.Text = i3.ToString();
worksheet.Cells[iOCR, 12] = "未完全识别成功";
i3 = i3 + 1;
iOCR = iOCR + 1;
}
}
iO = iO + 1;
}
workbook.Save();
//workbook.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
worksheet = null;
workbook = null;
excelApp = null;
MessageBox.Show("处理完成!");
}
private void button2_Click(object sender, EventArgs e)
{
var parser = new FileIniDataParser();
string iniFilePath = "config.ini";
try
{
IniData data = parser.ReadFile(iniFilePath);
string sectionName = "Apidate"; // 替换为你的节名
string keyName = "AKEY"; // 替换为你的键名
// 获取特定节和键的值
string value = data[sectionName][keyName];
MessageBox.Show(value);
}
catch (Exception ex)
{
//Console.WriteLine("Error reading INI file: " + ex.Message);
}
}
}
}