Ячейки Microsoft.Office.Interop.Excel остаются пустыми после их установки - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть приложение, в котором я пытаюсь записать в файл Excel. Кажется, он не работает.

Вот мой код:

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

namespace Image2Excel {
class Engine {
    public static void go(string imageFilename, string excelFilename = null) {
        //Image img = Image.FromFile(imageFilename);
        Bitmap btm = (Bitmap)Bitmap.FromFile(imageFilename, false);
        Image img = Image.FromFile(imageFilename, false);

        if (btm != null) {
            Color[][] colorArray = new Color[btm.Width][];
            for (int x = 0; x < btm.Width; x++) {
                colorArray[x] = new Color[btm.Height];
                for (int y = 0; y < btm.Height; y++) {
                    colorArray[x][y] = btm.GetPixel(x, y);
                }
            }

            var excel = new Microsoft.Office.Interop.Excel.Application();
            var workbook = excel.Workbooks.Add(Type.Missing);
            var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.ActiveSheet;
            worksheet.Name = "sheet1";

            worksheet.Cells[1,1] = "top left";
            worksheet.Cells[1,2] = "top right";
            worksheet.Cells[2,1] = "bottom left";
            worksheet.Cells[2,2] = "bottom right";

            workbook.SaveAs("temp.xlsx");
            workbook.Close();
            excel.Quit();

            Marshal.ReleaseComObject(worksheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excel);
        }
    } 
}
}

Я пытаюсь написать какой-то текст в первые 4 ячейки электронной таблицы. Это не работает. Когда я открываю файл, я ничего не вижу в ячейках.

Я вижу, что имя листа установлено на то, что я установил, так что я знаю, что оно записывает в файлы.

One при отладке я заметил, что рабочий лист.Cells [1,1] имеет значение null после его установки. Мне интересно, если мне нужно установить ячейку для объекта перед записью в него. Но я не уверен, как. Кажется, я не в состоянии сделать это:

worksheet.Cells[1,1] = new Microsoft.Office.Interop.Excel.Cell();

Наведение указателя мыши на ячейки говорит мне, что это объект Range, но я также не уверен, как установить его в диапазон. Я попробовал это:

worksheet.Range["A1"].Value = "hello";
worksheet.Range["A1"].Value2 = "hello";

... но они тоже не работают. worksheet.Range остается нулевым, как worksheet.Cells.

Как я могу убедиться, что для worksheet.Cells [1,1] или worksheet.Range ["A1"] задан объект, который будет принимать строковое значение ? Спасибо.

Вы можете найти мое приложение на github: https://github.com/gibran-shah/Image2Excel

Я использую Microsoft.Office.Interop.Excel версии 15.0.4795.1000.

У меня установлен Excel 2010 на моем компьютере.

1 Ответ

0 голосов
/ 17 февраля 2020

Я не пробовал ваш, но не могли бы вы попробовать эти методы? это сработало для меня.

1-й метод с Worksheets.Cells

// CREATE EXCEL OBJECTS.
Excel.Application xlApp;

Excel.Workbook xlWB;
Excel.Worksheet xlWS;

xlApp = new Excel.Application();

// Specify the path to the excel file
xlWB= xlApp.Workbooks.Open("path/to/xlFile.xls");

// Choose the sheet you want to open
xlWS = xlWB.Worksheets["Sheet1"];

// Write on the single cell 
xlWS.Cells["1", "D"] = "Example";

// Save the change and quit
xlWB.Close(true);
xlApp.Quit();           

2-й метод с Worksheets.get_Range()

// CREATE EXCEL OBJECTS.
Excel.Application xlApp;

Excel.Workbook xlWB;
Excel.Worksheet xlWS;

xlApp = new Excel.Application();

// Specify the path to the excel file
xlWB= xlApp.Workbooks.Open("path/to/xlFile.xls");

// Choose the sheet you want to open
xlWS = xlWB.Worksheets["Sheet1"];

// Write on the range of cells 
xlWS.get_Range["A3", "D5"] = "Example";

// Save the change and quit
xlWB.Close(true);
xlApp.Quit();           
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...