programing

Microsoft를 사용하여 Excel 2010의 데이터 읽기사무실. 인터럽트.엑셀

abcjava 2023. 7. 5. 20:02
반응형

Microsoft를 사용하여 Excel 2010의 데이터 읽기사무실. 인터럽트.엑셀

엑셀에서 데이터를 읽을 수 없습니다.사용 중인 코드는 다음과 같습니다.

using Excel = Microsoft.Office.Interop.Excel;

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"Book1.xlsx", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;

int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;

for (int i = 1; i <= rowCount; i++)
{
    for (int j = 1; j <= colCount; j++)
    {
        MessageBox.Show(xlWorksheet.Cells[i,j].ToString());
    }
}

다음과 같은 내용의 메시지 상자가 나타납니다.System.__ComObject값 대신에
이걸 어떻게 고칠 수 있을까요?

위의 솔루션을 찾았습니다. 코드는 다음과 같습니다.

string temp = (string)(xlRange.Cells[i, j] as Excel.Range).Value2;
MessageBox.Show(temp);

테스트해 본 적은 없지만, 읽어야 한다고 생각합니다.

MessageBox.Show(xlRange.Cells[i,j].ToString());

또는 그 대신에

MessageBox.Show(xlRange.Cells[i,j].Value.ToString());

사용해 보십시오.

MessageBox.Show(xlRange.Cells[i][j].Value);

다음 함수를 사용하여 N'번째 시트에 대한 DATATATable 객체로 데이터를 가져옵니다.

public DataTable GetWorkSheet(int workSheetID)
    {
        string pathOfExcelFile = fileFullName;
        DataTable dt = new DataTable();

        try
        {
            excel.Application excelApp = new excel.Application();

            excelApp.DisplayAlerts = false; //Don't want Excel to display error messageboxes

            excel.Workbook workbook = excelApp.Workbooks.Open(pathOfExcelFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //This opens the file

            excel.Worksheet sheet = (excel.Worksheet)workbook.Sheets.get_Item(workSheetID); //Get the first sheet in the file

            int lastRow = sheet.Cells.SpecialCells(excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row;
            int lastColumn = sheet.Cells.SpecialCells(excel.XlCellType.xlCellTypeLastCell, Type.Missing).Column;

            excel.Range oRange = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[lastRow, lastColumn]);//("A1",lastColumnIndex + lastRow.ToString());

            oRange.EntireColumn.AutoFit();


            for (int i = 0; i < oRange.Columns.Count; i++)
            {
                dt.Columns.Add("a" + i.ToString());
            }

            object[,] cellValues = (object[,])oRange.Value2;
            object[] values = new object[lastColumn];

            for (int i = 1; i <= lastRow; i++)
            {

                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    values[j] = cellValues[i, j + 1];
                }
                dt.Rows.Add(values);
            }

            workbook.Close(false, Type.Missing, Type.Missing);
            excelApp.Quit();
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message, "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);

        }
        return dt;

    }

이 코드를 사용해 보십시오.

MessageBox.Show(((Excel.Range)xlRange.Cells[i,j]).Value2.ToString());

이 코드는 저에게 성공적으로 작동합니다.

언급URL : https://stackoverflow.com/questions/15873389/reading-data-from-excel-2010-using-microsoft-office-interop-excel

반응형