标签: excel-interop

excel互操作替代方案

我已经开始使用Microsoft提供的Excel互操作程序集来处理我的一个C#应用程序.一切都很顺利,但似乎缺乏强大的打字,老实说,感觉就像我在写VBA代码.有没有其他方法可以与C#进行Excel交互,从而提供更好的OO体验?我顺便使用VS2010和.Net 4.0.

c# excel-interop

8
推荐指数
1
解决办法
1万
查看次数

如何使用C#更新数据透视表数据源?

我想知道如何更新现有的数据透视表数据源.我正在使用Microsoft.Office.Interop.ExcelExcel 2010 来定位用户.

我目前能够刷新数据透视表,它工作正常,但是当添加更多行时,我想在数据透视表数据源中包含这些行.例如,在Excel中查看时的数据透视表数据源是,DataSourceWorksheet!$A$2:$U$26并且我希望DataSourceWorksheet!$A$2:$U$86在更新/刷新Excel文件代码运行后将其更改为(60多行).

这是我的代码的简化版本

Application excelApplication = new Application();
Workbooks workbooks = excelApplication.Workbooks;
wrkBook = workbooks.Open(EXCEL_DOCUMENT_PATH, Missing.Value, false, Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, true, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value);

/* update data source worksheet code here (omitted for example) */

Worksheet pivotWorkSheet = (Worksheet)wrkBook.Sheets[PIVOT_SHEET_NAME];
PivotTable pivot = (PivotTable)pivotWorkSheet.PivotTables(pivotTableName); 

/* I would like to update the pivot tables data source here...

   I could use Range object from data source worksheet...

   Basically just want …
Run Code Online (Sandbox Code Playgroud)

c# excel-interop

8
推荐指数
1
解决办法
1万
查看次数

Excel自动化 - 如何说不

我正在开发一个vb.net控制台应用程序,它可以逐个打开多个电子表格,读取几个单元格并关闭文件.

当我打开文件时,某些电子表格具有Excel重新计算的公式,并且我收到一个对话框,询问我是否要在关闭电子表格时保存对电子表格的更改.

消息:"是否要将更改保存到myfile.xls?Microsoft Office Excel在打开上次由早期版本的Excel保存的文件时重新计算公式"

如何自动拒绝该对话框?

            Dim newCBD As New CBD
            Dim xlApp As Excel.Application
            Dim xlWorkBook As Excel.Workbook
            Dim xlWorkSheet As Excel.Worksheet

            xlApp = New Excel.ApplicationClass
            xlWorkBook = xlApp.Workbooks.Open(myFile)
            xlWorkSheet = xlWorkBook.Worksheets(1)

            ...do a bunch of junk here

            xlWorkBook.Close()
            xlApp.Quit()
Run Code Online (Sandbox Code Playgroud)

谢谢!

vb.net excel automation interop excel-interop

7
推荐指数
1
解决办法
1万
查看次数

使用Interop Excel保存XLS

当前设置:

因此,我可以使用以下代码将文件另存为XLS:

_myWorkbook.SaveAs("FileName.xls", Excel.XlFileFormat.xlWorkbookNormal)
Run Code Online (Sandbox Code Playgroud)

我还可以使用以下代码将文件另存为XLSX(因为我使用的是Office 2010):

_myWorkbook.SaveAs("FileName.xlsx", Excel.XlFileFormat.xlWorkbookDefault)
Run Code Online (Sandbox Code Playgroud)

问题:

我已尝试(未成功)使用以下代码将文件另存为XLSX:

_myWorkbook.SaveAs("FileName.xlsx", Excel.XlFileFormat.xlExcel12)
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?最后我查了一下,Excel 12是Excel 2007(支持XLSX的版本).我错过了什么吗?

(对于那些感兴趣的人,我收到This extension can not be used with the selected file type错误)

c# vb.net excel office-interop excel-interop

7
推荐指数
1
解决办法
1万
查看次数

用主要和次要y轴绘制线图c#

我一直在研究用c#绘制图表的方法.我有一个特定的要求,绘制一个图表,其中包含y轴和x轴以及第二个y轴.我已经尝试过使用excel Interop但是没有找到解决方案.我已经开始使用MSChart组件但是没有达到任何数据我的数据与...合作

index lines branches
1      20     5
2      30     8
3      34     6
Run Code Online (Sandbox Code Playgroud)

我想在x轴上绘制索引,在左y轴上绘制线的比例,在右y轴上绘制分支的比例.

我正在使用.net版本2.0和3.5,如果这有帮助

c# mschart excel-interop

7
推荐指数
1
解决办法
1万
查看次数

如何在C#.net中使用EXCEL interop api读取空单元格值?

如果我尝试读取空的EXCEL单元格,则会收到System.com_object错误.我的代码是:

public static List<OrderPC> getFilters(string fileCheckout)
    {
        List<OrderPC> orderPCs = new List<OrderPC>();
        XLDoc sldoc = new XLDoc();

        string localPath = @"C:\Temp\PCs.xlsx";

        Microsoft.Office.Interop.Excel.Application oXL=null;
        Microsoft.Office.Interop.Excel.Workbook mWorkBook=null;
        Microsoft.Office.Interop.Excel.Worksheet mWSheet1=null;
        Microsoft.Office.Interop.Excel.Range xlRange=null;
        try
        {
            oXL = new Microsoft.Office.Interop.Excel.Application();

            mWorkBook = oXL.Workbooks.Open(localPath);

            mWSheet1 = mWorkBook.Sheets[1];

            xlRange = mWSheet1.UsedRange;

            foreach (Microsoft.Office.Interop.Excel.Hyperlink hl in xlRange.Hyperlinks)
            {

               int y = hl.Range.Column;

                int z = hl.Range.Row;

                string vFilter = mWSheet1.Cells[z, y + 1].Value2.Trim();

                if (vFilter.CompareTo("Weekly") == 0)
                {
                    String baseUri = "http://xxx.yyy.net?";
                    int followUpIndex = baseUri.Length;
                    OrderPC orderPc …
Run Code Online (Sandbox Code Playgroud)

excel-interop excel-2010 c#-4.0

7
推荐指数
1
解决办法
2万
查看次数

Microsoft.Office.Interop.Excel:如何将边框应用于ONE CELL

我想使用Microsoft.Office.Interop.Excel库将边框应用于一个单元格.

我正在运行一个while循环,它在某个列中搜索一个空单元格,一旦找到单元格,我想对它应用边框.

我知道有很多关于这个使用Ranges的论坛,但我不能使用范围功能,因为我不知道它正在应用于哪个单元格.

我的想法是:

(Excel.Range)xlWS.Cells [row,1] .Borders.LineStyle =(Whatever Value);

有什么建议?(除了链接到其他论坛,我已经看过很多表格)?

c# excel border cell excel-interop

7
推荐指数
2
解决办法
4万
查看次数

包含多个打开的工作簿的自定义任务窗格

我已成功实现了Microsoft示例"演练:使用功能区按钮同步自定义任务窗格",如下所示:http: //msdn.microsoft.com/en-us/library/bb608590.aspx

最初我遇到了一个问题,任务窗格没有显示,结果是我的加载项和微软的"分析工具包"之间发生了一些冲突.禁用Analysis Toolpack后,自定义任务窗格开始按预期显示和隐藏.

然后,当用户按下按钮时,我编写了一些代码来更改所选范围内的单元格.这似乎工作得很好 - 直到我打开另一本工作簿!每个工作簿窗口都有自己的加载项功能区,但是当我单击切换按钮打开/关闭自定义任务窗格时,它只会打开/关闭创建的第一个窗口的自定义任务窗格.这与我单击切换按钮的窗口无关.

该代码在ThisAddIn_Startup中实例化CustomTaskPane对象(就像在示例代码中一样).我唯一添加的是UserControl中的按钮操作:

using xl = Microsoft.Office.Interop.Excel;

namespace SynchronizeTaskPaneAndRibbon
{
    public partial class TaskPaneControl : UserControl
    {
        public TaskPaneControl()
        {
            InitializeComponent();
        }

        private void actionButton1_Click(object sender, EventArgs e)
        {
            xl.Range selection_rng = Globals.ThisAddIn.Application.Selection;

            foreach (xl.Range cell in selection_rng.Cells)
            {
                if (cell.Value is string)
                {
                    string v = cell.Value;
                    cell.Value = v + "*";
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

代码的其余部分就像在示例中一样.

有没有办法更改示例,以便它可以用于打开多个工作簿?我想要的是相同的加载项出现在每个工作簿窗口中,具有相同的功能区和相同的自定义窗格.当然,要将任何功能区操作(例如按下按钮)路由到出现在同一窗口中的自定义任务窗格.

c# ribbon excel-interop customtaskpane

7
推荐指数
1
解决办法
2032
查看次数

使用Excel Interop的公式

我正在使用F#和Excel Interop将数据输出到Excel电子表格.我的第一个方法是单独设置每个单元格:

worksheet.Range(range1).Value2 <- "=sum(a1:a10)"
worksheet.Range(range2).Value2 <- "=min(a1:a10)"
worksheet.Range(range3).Value2 <- "=max(a1:a10)"
(* etc *)
Run Code Online (Sandbox Code Playgroud)

但是,当有大量公式时,这太慢了,所以我切换到了一个数组:

worksheet.Range(range).Value2 <- [| "=sum(a1:a10)"
                                    "=min(a1:a10)"
                                    "=max(a1:a10)" |]
Run Code Online (Sandbox Code Playgroud)

要么

worksheet.Range(range).Formula <- [| "=sum(a1:a10)"
                                     "=min(a1:a10)"
                                     "=max(a1:a10)" |]
Run Code Online (Sandbox Code Playgroud)

但是,现在Excel只在单元格中显示这些字符串,而不是计算公式的值.我也尝试过:

worksheet.Range(range).FormulaArray <- [| "=sum(a1:a10)"
                                          "=min(a1:a10)"
                                          "=max(a1:a10)" |]
Run Code Online (Sandbox Code Playgroud)

但这与每个公式的目标范围相混淆.我不确定那里发生了什么.(而不是将其保留为"a1:a10",Excel根据公式的位置转换目标范围.)

有一个更好的方法吗?

更新:我也尝试使用"= MIN($ G $ 2:$ G $ 5)",但这产生了相同的效果,其中Excel只显示字符串而不评估公式.

对于它的价值,如果我进入单元格,擦除然后重新添加公式中的任何字符,当我点击"输入"时,Excel将对其进行评估.

更新2:我也尝试了以下内容:

worksheet.Range(range).FormulaR1C1 <- [| "=sum(R2C[0]:R4C[0])"
                                          "=average(R2C[0]:R4C[0])"
                                          "=min(R2C[0]:R4C[0])"
                                          "=max(R2C[0]:R4C[0])" |]
Run Code Online (Sandbox Code Playgroud)

但我遇到了同样的问题:Excel将它们呈现为字符串而不是评估公式.

.net f# excel-interop

6
推荐指数
1
解决办法
3414
查看次数

如何使用MS interop excel检测c#中的合并单元格

我想在行/整张表中检测合并的单元格(最好).这是我的代码

Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel.Workbook workbook = xl.Workbooks.Open(source);
//Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[sheetNumber];
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[objInMemory._sheetName];
xl.ScreenUpdating = false;
ws.Columns.ClearFormats();
ws.Rows.ClearFormats();
int colCount = ws.UsedRange.Columns.Count;
int rowCount = ws.UsedRange.Rows.Count;
int strtRow = ws.UsedRange.Rows[1].Row;
int strtCol = ws.UsedRange.Columns[1].Column;


 Microsoft.Office.Interop.Excel.Range objRange = null;
Run Code Online (Sandbox Code Playgroud)

这段代码都没有

if (ws.Cells.MergeCells)
{

}
Run Code Online (Sandbox Code Playgroud)

也不是这段代码(仅适用于row1)

for (int j = strtCol; j < strtCol + colCount; j++)
{
    objRange = ws.Cells[strtRow, j];

    if (ws.Cells[strtRow, j].MergeCells)
    {
        message = "The Sheet Contains Merged Cells";
        break;
    }  
}
Run Code Online (Sandbox Code Playgroud)

似乎工作..请告诉我如何检查工作表/特定范围是否包含合并的单元格.

c# excel excel-interop

6
推荐指数
2
解决办法
8354
查看次数