首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在c#中使用microsoft.office.interop.excel只获得一次excel文件的合并单元格

如何在c#中使用microsoft.office.interop.excel只获得一次excel文件的合并单元格
EN

Stack Overflow用户
提问于 2015-03-17 06:43:37
回答 1查看 1.9K关注 0票数 0

我正在使用C#读取microsoft.office.interop.excel中的excel文件。当有合并单元格的文件时,它是通过包含合并单元格中的单元格数来循环的,而我想要同时合并区域。

这是我的方法

代码语言:javascript
运行
复制
public void ImportXLX()
    {
        Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();

        Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Open(@"C:\Users\Vipin\Desktop\Sheets\MyXL6.xlsx", 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);

        int workSheetCounts = wb.Worksheets.Count;

        for (int sheetCounter = 1; sheetCounter <= workSheetCounts; sheetCounter++)
        {
            Microsoft.Office.Interop.Excel.Worksheet workSheet = wb.Sheets[sheetCounter];

            Range excelRange = workSheet.UsedRange;
            Range objRange = null;

            int rowCount = 0;
            float totalRowWidth = 0;
            foreach (Microsoft.Office.Interop.Excel.Range row in excelRange.Rows)
            {
                rowCount++;
                totalRowWidth = row.Width;
                int colCount = 0;

                foreach (Microsoft.Office.Interop.Excel.Range c in row.Cells)
                {
                    colCount++;
                    objRange = workSheet.Cells[rowCount, colCount];

                    double width = 0;
                    double height = 0;
                    string colVal = null;

                    if (objRange.MergeCells)
                    {
                        colVal = Convert.ToString(((Range)objRange.MergeArea[1, 1]).Text).Trim();
                        width = objRange.MergeArea.Width;
                        height = objRange.MergeArea.Height;


                    }
                    else
                    {
                        colVal = Convert.ToString(objRange.Text).Trim();
                        width = objRange.Width;
                        height = objRange.Height;
                    }
                    Debug.Write("objRange = " + objRange + " rowCount = " + rowCount + " Width = " + width + " height = " + height + "TotalColumnWidth = " + totalRowWidth + "TotalRowHeight = " + totalColHeight + " \n ");
                }
            }
        }
        app.Quit();
    }

下面是excel文件的屏幕截图

在这里,我想要3,1,5,1,1,7,19,1单元,只有一次循环,其宽度和高度完全相同。

EN

回答 1

Stack Overflow用户

发布于 2015-03-17 11:41:49

微软目前不推荐、也不支持任何无人值守、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)的Microsoft应用程序自动化,因为在此环境中运行Office时,Office可能会出现不稳定的行为和/或死锁。

如果您正在构建在服务器端上下文中运行的解决方案,则应尝试使用已为无人值守执行而安全的组件。或者,您应该尝试找到允许至少部分代码运行客户端的替代方案。如果您使用来自服务器端解决方案的Office应用程序,则该应用程序将缺乏许多成功运行所需的功能。此外,您将承担风险与您的整体解决方案的稳定性。

您可以在办公服务器端自动化的几点思考文章中阅读更多有关这方面的内容。您可以考虑使用Open或为服务器端执行而设计的任何其他第三方组件。有关详细信息,请参阅欢迎访问OpenXMLSDK2.5forOffice

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29092856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档