0

我编写的代码可以正常工作。该代码涉及将图像和文本传输到 excel 单元格,并且在她得到错误的一台客户端计算机上工作正常:

System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'

将数据表导出到 Excel 的代码:

   string ImageFolderPath = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\Images\\";

        SaveFileDialog saveFileDialog1=new SaveFileDialog();
        saveFileDialog1.Filter = "Excel (*.xls)|*.xls";
       // saveFileDialog1.Title = "Select Empty Excel Sheet";
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if (!saveFileDialog1.FileName.Equals(String.Empty))
            {
                FileInfo f = new FileInfo(saveFileDialog1.FileName);
                if (f.Extension.Equals(".xls") || f.Extension.Equals(".xlsx"))
                {
                    Microsoft.Office.Interop.Excel.Application xlApp;
                    Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
                    Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
                    object misValue = System.Reflection.Missing.Value;

                    xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
                    xlWorkBook = xlApp.Workbooks.Add(misValue);
                    xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                    int i = 0;
                    int j = 0;

                    xlWorkSheet.Cells[3, 1] = "SKU";
                    xlWorkSheet.Cells[3, 2] = "EAN IPC";
                    xlWorkSheet.Cells[3, 3] = "ASIN";
                    xlWorkSheet.Cells[3, 4] = "CONDITION";
                    xlWorkSheet.Cells[3, 5] = "PRICE";
                    xlWorkSheet.Cells[3, 6] = "PRODUCT TITLE";
                    xlWorkSheet.Cells[3, 7] = "STATUS";
                    xlWorkSheet.Cells[3, 8] = "PRODUCT IMAGE";
                    xlWorkSheet.Cells[3, 9] = "PRODUCT URL";
                    xlWorkSheet.Cells[3, 10] = "IMAGE NAME";


                    xlWorkSheet.Cells[2, 1] = "Accept Value :";
                    xlWorkSheet.Cells[2, 2] = textBox1.Text;

                    xlWorkSheet.Cells[2, 4] = "Location :";
                    xlWorkSheet.Cells[2, 5] = "Amazon.co.uk";

                    for (i = 0; i <= resultSheet.Rows.Count - 1; i++)
                    {
                        for (j = 0; j <= resultSheet.Columns.Count - 1; j++)
                        {

                            if (j == 7)
                            {
                                string imagString = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\Images\\";
                                imagString = imagString + resultSheet.Rows[i][j+2].ToString();
                                Microsoft.Office.Interop.Excel.Range oRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[i + 5, j + 1];
                                float Left = (float)((double)oRange.Left);
                                float Top = (float)((double)oRange.Top);
                                const float ImageSize = 32;
                                xlWorkSheet.Shapes.AddPicture(imagString, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, Left, Top, ImageSize, ImageSize);
                                oRange.RowHeight = ImageSize + 2;

                            }
                            else
                            {
                                xlWorkSheet.Cells[i + 5, j + 1] = resultSheet.Rows[i][j].ToString();

                            }
                        }
                    }

                    xlWorkBook.SaveAs(saveFileDialog1.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
                    xlWorkBook.Close(true, misValue, misValue);
                    xlApp.Quit();

                    Marshal.ReleaseComObject(xlWorkSheet);
                    Marshal.ReleaseComObject(xlWorkBook);
                    Marshal.ReleaseComObject(xlApp);
                    MessageBox.Show("Excel file created , you can find the file " + saveFileDialog1.FileName);
                }
                else
                {
                    MessageBox.Show("Invalid file type");
                }
            }
            else
            {
                MessageBox.Show("You did pick a location " +
                                "to save file to");
            }
        }

客户使用的是excel 2002,所以不知道该怎么办!

4

2 回答 2

2

这是一个关于如何使用 Excel 进行后期绑定的快速示例。这篇文章还包括以下内容

  1. 添加新工作表(根据您的要求)
  2. 重命名新添加的工作表
  3. 写入单元格

我已经评论了代码,所以你理解它应该没有任何问题:)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            object xlApp;
            object xlWbCol;
            object xlWb;
            object xlSheet;
            object xlRange;
            object xlWsCol;

            //~~> create new Excel instance
            Type tp;
            tp = Type.GetTypeFromProgID("Excel.Application");
            xlApp = Activator.CreateInstance(tp);

            object[] parameter = new object[1];
            parameter[0] = true;
            xlApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, xlApp, parameter);
            xlApp.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, xlApp, parameter);

            //~~> Get the xlWb collection
            xlWbCol = xlApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, xlApp, null);

            //~~> Create a new xlWb
            xlWb = xlWbCol.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, xlWbCol, null);

            //~~> Get the worksheet collection
            xlWsCol = xlWb.GetType().InvokeMember("WorkSheets", BindingFlags.GetProperty, null, xlApp, null);

            //~~> Create a new workxlSheet
            xlSheet = xlWb.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, xlWsCol, null);

            //~~> Rename the workxlSheet to your SO Handle
            xlSheet.GetType().InvokeMember("Name", BindingFlags.SetProperty, null, xlSheet, new object[] { "confusedMind" });

            //~~> Assign cell D10 to xlRange object
            xlRange = xlSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, xlSheet, new object[] { "D10" });

            //~~> Write to cell D10
            xlRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, xlRange, new object[] { "Blah Blah" });

            //~~> Release the object
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
        }
    }
}

截屏

在此处输入图像描述

跟进

要添加图像,请使用它。根据需要进行更改

object xlShape;
xlShape = xlSheet.GetType().InvokeMember("Shapes", BindingFlags.GetProperty, null, xlSheet,null);
String imagString = @"C:\Image.jpg";
xlSheet.GetType().InvokeMember("AddPicture", BindingFlags.InvokeMethod, null, xlShape,
new object[] {imagString, false, true, 10, 10, 200, 200 });
于 2013-01-25T08:48:49.677 回答
0

信息很清楚;构建您的应用程序所需的 Excel (2007) 版本比客户端安装的 Excel (2002) 版本更新。

将您的客户端升级到较新版本的 Excel (2007),或降级您的应用程序所需的 Excel 互操作程序集(如果您可以找到适用于旧版 Excel 的程序集),或者改用 Excel 的 COM 自动化。

于 2013-01-24T22:31:03.430 回答