5
6

More than 5 years have passed since last update.

エクセルシート名の禁則文字を削除する

Last updated at Posted at 2015-11-21

エクセルシート名には、命名規則がありまして、

Excel2003で空文字のシート名をつけようとするとダイアログが表示されて、
文字列長の制約と、下記禁則文字の仕様が表示される。

・入力した名前に次の文字が含まれていないことを確認します: コロン(:)、円記号()、スラッシュ(/)、疑問符(?)、アスタリスク(*)、左角かっこ([)、右角かっこ(])

ネット上の公式な情報は下記URLくらいの様子?

[XL2003]シート名に関する仕様および制限について
https://support.microsoft.com/ja-jp/kb/436482

  • 禁則文字の全角文字もだめなんだそうだ。

以下、禁則文字を正規表現で削除するコードについて数種言語の実装をメモしておく。
※文字列長についてのチェックはしないです
※あと、ブック内で一意になるチェックとかも実際には要ると思う

とりあえず正規表現

[:\\?\[\]/*:¥\?[]/*]
  • 「履歴」というマジック的な禁止文字もあるらしいが、それは無視

vb(.net)でエクセルシート名の禁則文字を削除する

ExcelSheetNameRegexSample.vb
Module Module1
    ReadOnly SheetNameForbiddenRegex As New System.Text.RegularExpressions.Regex("[:\\?\[\]/*:¥\?[]/*]")

    Sub Main()

        Dim origSheetName = "prefix<:\?[]/*:¥\?[]/*>suffix"

        Dim okSheetName = SheetNameForbiddenRegex.Replace(origSheetName, "")

        Console.WriteLine(okSheetName) 'prefix<>suffix

    End Sub

End Module

vbはエスケープシーケンス的なものが(他言語より)特殊なので、正規表現をそのまま書ける。

C#でエクセルシート名の禁則文字を削除する

ExcelSheetNameRegexSample.cs
using System;
using System.Text.RegularExpressions;

namespace ExcelSheetNameRegexSample
{
    class Program
    {
        static readonly Regex SheetNameForbiddenRegex = new Regex("[:\\\\?\\[\\]\\/*:¥\?[]/*]");

        static void Main(string[] args)
        {
            var origSheetName = "prefix<:\\?[]/*:¥\?[]/*>suffix";

            var okSheetName = SheetNameForbiddenRegex.Replace(origSheetName, "");

            Console.WriteLine(okSheetName); //prefix<>suffix

        }
    }
}

javaでエクセルシート名の禁則文字を削除する

ExcelSheetNameRegexSample.java
package sample;

import java.util.regex.Pattern;

public class ExcelSheetNameRegexSample {
    static final Pattern SHEET_NAME_FORBIDDEN_PATTERN = Pattern.compile("[:\\\\?\\[\\]\\/*:¥\?[]/*]");

    public static void main(String[] args) {
        String origSheetName = "prefix<:\\?[]/*:¥\?[]/*>suffix";

        String okSheetName = SHEET_NAME_FORBIDDEN_PATTERN.matcher(origSheetName).replaceAll("");

        System.out.println(okSheetName); //prefix<>suffix
    }
}

rubyでエクセルシート名の禁則文字を削除する

sheet_name_forbidden_regexp.rb

SHEET_NAME_FORBIDDEN_REGEXP = Regexp.new("[:\\\\?\\[\\]\\/*:¥\?[]/*]")

orig_sheet_name = 'prefix<:\?[]/*:¥\?[]/*>suffix'
ok_sheet_name = orig_sheet_name.gsub(SHEET_NAME_FORBIDDEN_REGEXP, '')

puts ok_sheet_name #prefix<>suffix

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6